1、bert的架构是什么 目标是什么 输入包括了什么 三个embedding输入是怎么综合的?
Bert的结构主要是Transformer的encoder部分,其中Bert_base有12层,输出维度为768,参数量为110M,Bert_large有24层,输出维度为1024,参数总量为340M。
Bert的目标是利用大规模无标注语料训练,获得文本包含丰富语义信息的表征。
Bert的输入:token embedding,segment embedding,position embeddimg,三个向量相加作为模型的输入。
2、transformer里面每一层的主要构成有哪些
Transformer本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和Layer Normalization层。
3、Seq2seq模型中decode和encode的差别有哪些
encoder是对输入的序列进行编码,编码的时候不仅可以考虑当前状态,还可以考虑前后状态,在进行decoder的时候不能看到当前状态之后的信息,考虑的是encoder的context vector和decoder上一个时刻的信息。
4、leetcode.121. 买卖股票的最佳时机
方法一:暴力解法
对数组进行遍历,找到后一个数与前一个数的最大差值,返回。
注意遍历 j 时要从 i + 1 进行遍历。
代码如下:
Pythonclass Solution:
def maxProfit(self, prices: List[int]) -> int:
res = 0
for i in range(len(prices)):
for j in range(i+1,len(prices)):
res = max(res,prices[j] - prices[i])
return res
在 leetcode 上运行上面代码会出现超出时间限制的问题。
时间复杂度:O(n^2)
空间复杂度:O(1)
方法二:
只进行一次遍历,在遍历过程中更新两个值,股票最小值和差值最大值,更新到最后即可。
Pythonclass Solution:
def maxProfit(self, prices: List[int]) -> int:
res = 0
minPrice = prices[0]
for i in range(len(prices)):
res = max(res, prices[i] - minPrice)
minPrice = min(minPrice, prices[i])
return res
时间复杂度:O(n)
空间复杂度:O(1)
5、求数组中所有子数组和的最大值 leetcode 剑指 Offer 42. 连续子数组的最大和
本题为剑指offer42题,和Leetcode第53题相同。
题目描述给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
解析:本题在面试时要求使用动态规划的方法,因此需要找到对应的状态定义(子问题)和状态转移方程(子问题之间的关系)
状态定义:dp[i]:表示以 nums[i] 结尾的连续子数组的最大和。
状态转移方程:
分两种情况考虑:dp[i-1] <= 0 和 dp[i-1] > 0
如果 dp[i - 1] > 0,那么可以把 nums[i] 直接接在 dp[i - 1] 表示的那个数组的后面,得到和更大的连续子数组;
如果 dp[i - 1] <= 0,那么 nums[i] 加上前面的数 dp[i - 1] 以后值不会变大。于是 dp[i] 「另起炉灶」,此时单独的一个 nums[i] 的值,就是 dp[i]。
得到状态转移方程如下:
整理可得:
代码如下:
Pythonclass Solution:
def maxSubArray(self, nums: List[int]) -> int:
size = len(nums)
pre = 0
res = nums[0]
for i in range(size):
pre = max(nums[i], pre + nums[i])
res = max(res, pre)
return res
6、编辑距离 leetcode 72
编辑距离 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例:
Python输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
解题思路:
编辑距离样例网址:https://alchemist-al.com/algorithms/edit-distance
图中数字表示序列“TAGGA”依次更改为“GCCCGT”对应的编辑距离。
- 第一行数字和第一列数字表示将空字符串变成相应字符所需要的编辑距离;
上述解题思路对应的代码如下:
Pythonclass Solution:
def minDistance(self, word1: str, word2: str) -> int:
n1 = len(word1)
n2 = len(word2)
# 存储当前元素的编辑距离
dp = [[0] * (n2 + 1) for _ in range(n1 + 1)]
# 第一行
for j in range(1, n2 + 1):
dp[0][j] = dp[0][j-1] + 1
# 第一列
for i in range(1, n1 + 1):
dp[i][0] = dp[i-1][0] + 1
for i in range(1, n1 + 1):
for j in range(1, n2 + 1):
# 相等时copy左上角的值
if word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
# 不相等时:mmin(上,左、左上角) + 1
else:
dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-
1] ) + 1
#print(dp)
return dp[-1][-1]
7、bert有什么可以改进的地方
问题:中文BERT是以汉字为单位训练模型的,而单个汉字是不一表达像词语或者短语具有的丰富语义。
改进:ERNIE模型,给模型输入知识实体,在进行mask的时候将某一个实体的汉字全都mask掉,从而让模型学习知识实体。
BERT-WWM:短语级别遮盖(phrase-level masking)训练。
问题:NSP任务会破坏原本词向量的性能。
改进:RoBERTa,移除了NSP任务,同时使用了动态Mask来代替Bert的静态mask。
8、bert的mask策略
随机mask每一个句子中15%的词,用其上下文来做预测,其中,
80%的是采用[mask],my dog is hairy → my dog is [MASK]
10%的是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple
10%的保持不变,my dog is hairy -> my dog is hairy
9、Word2vec的两种训练目标是什么 其中skip-gram训练的loss function是什么
CBOW和Skip-Gram模型。
10、BPE分词了解吗?
BPE与Wordpiece都是首先初始化一个小词表,再根据一定准则将不同的子词合并。词表由小变大。
BPE与Wordpiece的最大区别在于,如何选择两个子词进行合并:BPE选择频数最高的相邻子词合并,而WordPiece选择能够提升语言模型概率最大的相邻子词加入词表。
↓↓↓免费送!福利!福利!福利↓↓↓
了解七月在线的的小伙伴应该知道2019年七月在线出了两本书《名企AI面试100题》和《名企AI面经100篇》,反响很好,助力数千人拿到dream offer。今年我们又整理出了两本书《2021年最新大厂AI面试题 Q2版》、《机器学习十大算法系列》、《2021年最新大厂AI面试题 Q3版》,七月在线学员拿到书后反响不错。为了让更多AI人受益,七仔现把电子版免费送给大家。
↓ ↓ ↓以下5本书,电子版免费送 ↓ ↓ ↓
刚出的《2021年最新大厂AI面试题 Q3版》还没来得及拍照:
《2021年最新大厂AI面试题 Q2版》、《2021年最新大厂AI面试题 Q3版》《机器学习十大算法系列》、《名企AI面试100题》及《名企AI面经100篇》无套路,免费取!
需要的小伙伴评论区发书名,看到后发你。
喜欢这样的福利请三连,三连,你的鼓励是七仔继续放福利,持续输出的不竭动力!