将同义词分类

我有50,000封电子邮件的主题行,我想根据同义词或可以互相替代的词语对其中的词语进行分类。

例如:

Top sales!

Best sales

我想把它们归为一组。

我使用nltk的wordnet构建了以下函数,但效果不佳。

def synonyms(w,group,guide):    try:         # 检查词语是否相似        w1 = wordnet.synset(w +'.'+guide+'.01')        w2 = wordnet.synset(group +'.'+guide+'.01')        if w1.wup_similarity(w2)>=0.7:             return True        elif w1.wup_similarity(w2)<0.7:            return False    except:         return False

有什么想法或工具可以实现这个目标吗?


回答:

实现这个目标最简单的方法是比较各自词嵌入的相似性(最常见的实现是Word2Vec)。

Word2Vec是一种在向量空间中表示词语语义含义的方式,使得可以比较词语的含义,而不需要像WordNet那样的大型词典/同义词词库。

常规的Word2Vec实现的一个问题是它不能区分同一个词的不同含义。例如,单词bank在以下这些句子中会有相同的Word2Vec表示:

  • The river bank was dry.
  • The bank loaned money to me.
  • The plane may bank to the left.

在这些情况下,Bank具有相同的向量,但你可能希望它们被分类到不同的组中。

解决这个问题的一种方法是使用Sense2Vec实现。Sense2Vec模型考虑了词语的上下文和词性(以及可能的其他特征),使你能够区分同一个词的不同含义。

在Python中,一个很棒的库是Spacy。它类似于NLTK,但由于使用Cython编写,速度更快(标记化速度提高20倍,标记速度提高400倍)。它还内置了Sense2Vec嵌入,因此你可以完成相似性任务,而无需其他库。

使用起来非常简单:

import spacynlp = spacy.load('en') apples, and_, oranges = nlp(u'apples and oranges')apples.similarity(oranges)

它是免费的,并且具有宽松的许可证!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注