面经 使用n-gram划分语言种类 qihongcheng 2021年10月29日 2021年12月10日 对N-Grams的尝试 对于面试出这道题目,我的猜想是ng算法是es搜索这类分布式存储的一种模糊查询的方式。所以出了这道题目。看起来像是搞人工智能算法,但实际上确实在分布式领域用得上。个人还是挺喜欢挑战这些有趣的算法,遂尝试了一下。 个人理解,ng算法就是将文本转化成按n个字母划分,并用出现频率排序的一种标识文本特征的算法。 第一步:将文本按照以n为大小的窗口滑动取值,将结果放入哈希map,若已经存在了,把value加一第二步:将这个哈希map的数据放入vector数组,用自己写的sort进行排序,以频数优先,频数相等,用字典序排先后。这个排好序的vector就是ng算法的特征输出了。第三步:获得两个vector,将要识别文本的vector,以<grams(特征值),频数排名>存入哈希map。遍历训练文本的vector,在哈希map中查找,若存在,则计算当前vector的下标和map中对应排名的绝对值。将其累加。若不存在,则这个绝对值为数组长度(使用一个最大值,代表距离最远)。第四步:重复第三步,获取一系列的绝对值和对应分类名称。按绝对值升序排序,作为预测分类输出。 所以按理说,使用训练文本来预测,一定绝对值是0,这样才是正确的。PS:但是不知道为什么,示例里的芬兰语文章,预测出来是英语,但是摘取网上的芬兰语文章预测结果是正确的。摘取网上其他种类语言也都能正确预测。也许是需要其他的细节上的改进。PS:这个输入输出要求真严格2333. 一些测试用例与结果下图是一个芬兰语的歌曲芬兰语歌曲- Nyt Ja Tässä 德语文章,也是网上随便搜的 来源如图下所示 挪威语可真难找,找了个网站搜搜了https://www.startsiden.no/sok/?q=Spanx 来源如下