背景
最近做优化评论的工作,涉及到一些自然语言处理的问题,记录如下。
中文和英文很大的一个不同在于中分需要分词。对于英文来说,一个单词就是一个词,而对于中文来说,可能是一个汉字代表一个词,也可能是几个汉字代表一个词。因此在使用许多语言模型的时候,首先要进行分词。
分词的一个简单的方案是使用结巴分词。其中涉及自定义词语的权重和自定义停用词。虽然是python写的,但是支持很多语言的调用,分词之后就可以使用一些模型进行语义分析。
一段评论的关键信息,有评论的字数,关键词,词频,主题,情感倾向等
过长或者过短的评论往往都不能提供有效信息。过长的评论有可能是一些无意义的粘贴的段落,过短的评论信息含量比较少。当然,也有一些详细的有效的长评论,只是占比确实小一些。
关键词或者是敏感词,可以过滤掉一些负面的评论,留下正面评论。但是简单的规则很难准确的判断语句的含义,经常误伤或者漏网。
利用机器学习模型可以帮助分析语句的含义。但是监督学习需要样本的标注。
对于标注,有人工标注最好,如果没有,可以采用用户评分以及简单规则过滤,在模型训练之后,可进一步对之前的分类再分类,反复迭代。如此也是加速人工标注的方法。。
监督学习还需要样本,也就是需要将分词向量化。向量化的一种方式是one-hot,可同时配合tf-idf方法,另一种方式是采用word2vec方法。在得到词特征之后,可以使用lr或者svm或者lstm等模型进行训练。fasttext是一种基于word2vec的文本分类工具。
fasttext除了可以用于分类,还可以得到词向量,以计算词语之间的相似度,仅在做关键词过滤时,也可以做词语的扩展,对于近义词做相似的处理,好过字与字的严格匹配。
基本使用
fasttext可以对一个标注的语段分类,也可以得到词向量做为下一步的处理的特征
事实上,如果做商品推荐,如果将一系列的商品看做一系列的分词,也可以使用fasttext实现基于商品的协同过滤。
fasttext可以至少有两种使用方式,一种是基于命令行的,一种是基于python的。命令行似乎更快一点。