来源:投稿 作者:LSC
编辑:学姐
一面
1.自我介绍
2.介绍项目
做推荐算法相关的,目前做召回,介绍了召回策略和召回u2i模型。
3.场景题
有很多用户,点击或者购买了优惠券,但是是随机点击或者购买的,如果直接把点击或者购买的样本当做正样本使用,模型会学不好?在召回层面应该怎么解决?
答: (1)
样本层面
。可以设定一个阈值或者频率,假如点击购买的次数频率低于这个值,那么可以把这个样本当成困难负样本,或者把这些正样本都以一定的概率当成困难负样本,还可以对真的正样本进行加权,采用类似的策略,就是不要全部都当成正样本使用,并且尽可能去构造困难负样本,让简单和困难负样本达到一定的比例,理想情况下一般是1:1。
(2)
损失函数方面
。可以采用infonce circleloss tulpetloss等拉大正负样本的差距。
(3)
特征方面
。可以在训练样本中增加与点击购买优惠券是否随机相关的一些特征,主要结合业务,方便模型进一步学习和训练,也可以由模型去生成一些特征,比如对偶增强的方法或者transformer特征回归,当然这个难度比较大。
(4)
策略方面
。采用一些专门的策略,比如设定一些规则把一些随机性明显的样本过滤等,或者当成一路特殊的召回队列
(5)
模型方面
。可以增强模型参数提升学习能力。比如可以使用mmoe 特征交叉等,但是要注意模型不能太大,不然会导致线上服务响应慢。
其中(1)是最重要最关键的。
4.coding
给定一个N阶楼梯,一次可以向上走1阶,也可以走2阶,并且每一次登顶爬升过程中可以有一次回退机会,回退机会可以用也可以不用,如果使用只能回退一阶,综合考虑这几种情况,求解一共有多少种登顶走法?
def solve(N):
if N == 0:
return 1
if N == 1:
return 1
dp = [[0] * 2 for _ in range(N + 2)] # dp[i][0]未使用回退, dp[i][1]已使用回退
# 边界条件
dp[0][0] = 1
dp[0][1] = 0
dp[1][0] = 1
dp[1][1] = 1
for i in range(2, N + 1):
dp[i][0] = dp[i-1][0] + dp[i-2][0]
dp[i][1] = dp[i-1][1] + dp[i-2][1] + dp[i+1][0] if i + 1 <= N else dp[i-1][1] + dp[i-2][1]
return dp[N][0] + dp[N][1]
5.反问
核心部门,业务很多,使用传统的推广搜算法,业务包括广告投放,因果推断,用户画像等。
二面
1.自我介绍
2.介绍自己的实习、工作项目,进行了相关提问
3.跷跷板问题怎么解决?
4.Coding
合并两个有序链表,用递归和非递归两种方法写
(1)递归
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
if l1.val l1.next = mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = mergeTwoLists(l1, l2.next)
return l2
(2)非递归
class link:
def __init__(self, x):
self.data = x
self.next = None
def mergeSortList(link1, link2):
head1 = link(0)
head2 = link(0)
head1.next = link1
head2.next = link2
res = link(0)
head3 = res
while link1 != None and link2 != None:
if link1.data <= link2.data:
temp = link1
head1.next = temp.next
temp.next = None
res.next = temp # ****
link1 = head1.next
else:
temp = link2
head2.next = temp.next
temp.next = None
res.next = temp # ****
link2 = head2.next
res = res.next
if link1 != None:
res.next = link
elif link2 != None:
res.next = link2
return head3.next
关注“
学姐带你玩AI
”公众号,
回复“
简历
”
领取算法工程师万能简历公式+模板