应该使用什么机器学习算法来分析字符串之间的关系?

人工智能 神经网络 人工智能设计 算法
2021-10-25 14:04:43

我正在尝试构建一个接收单个字符串的神经网络,例如:“dog”作为输入,并输出 50 个左右相关的主题标签,例如“#pug、#dogsarelife、#realbff”。

我曾考虑过使用分类器,但由于将有数百万个主题标签可供选择,而且英语词典中有数百万个可能的单词,因此几乎不可能搜索每个标签的概率

它将通过分析 Twitter 帖子的文本及其主题标签来学习信息,并找出哪些主题标签与哪些特定的词相匹配。

3个回答

这是实现您想要的任务的好方法:

第 1 步 -计算您想要包含的所有单词的向量表示(即嵌入)。有许多算法可以完成这项任务。

第 1 步 - 计算嵌入

第 2 步 -通过应用 K-最近邻 (KNN) 或类似算法选择与您的输入词(例如狗)相对应的#words。您基本上使用嵌入来计算距离。

第 2 步 - 应用 KNN

详细步骤:

步骤1-

在 NLP 中,我们将人类语言表示为一个值向量而不是一组字符,以便对其进行处理。为此,文献中有 3 种方法:

- 词级嵌入:将每个词表示为一个值向量。算法:Google 的 Word2Vec论文)、Facebook 的 fastText斯坦福大学的GloVe (论文)...

- 字符级嵌入:将每个字符表示为值向量。算法:ELMo论文)...

- Sentence Level Embeddings:将一个句子表示为一个值向量。算法:Google 的 Universal Sentence Encoder论文)...

在你的情况下,如果你只有单词,我建议使用GloVeElMo ,如果你有单词和句子,我建议使用Universal Sentence Encoder. 计算所有单词嵌入并进入下一步。

第2步-

现在您有了嵌入,计算所有单词之间的距离(使用 Euclidian、Minkowski 或任何其他距离)请注意,计算可能需要一些时间,但只会执行一次。

现在,每次你有一个词(例如狗)时,你都会使用计算出的距离应用KNN算法,你会得到与这个词最相关的词。

注意:如果您使用 Universal Sentence Encoder,则无需计算距离和应用 KNN,因为使用嵌入的点积很容易计算相似度。有关详细信息,请参阅我的快速实现示例

您可以尝试使用 Mallet(使用 Gibs Sampling)或 gensim LDA(使用 drichlet 先验)将问题建模为不同文档(推文)中的主题(主题标签)。 https://towardsdatascience.com/topic-modeling-and-latent-dirichlet-allocation-in-python-9bf156893c24有一个很好的例子。

我认为您对分类器是错误方法的直觉是一个很好的直觉。这看起来像是词向量的一个很好的用例,一种“自我监督”学习技术,将标记(例如“狗”)映射到向量(可能有 50 到 500 维之间的任何地方)。Facebook 开源了一个非常优秀的用于训练词向量的工具,称为 FastText您可以使用它来将令牌和主题标签等嵌入到单词嵌入空间中。您应该会发现“狗”的向量以“接近”(小余弦距离)结束。给定一个词,你可以很容易地查找它的向量(当然是在你的语料库上训练之后),但是如何找到其他接近它的向量呢?如果你想做得比“蛮力”更好Facebook 出色的 FAISS 库,用于快速相似性搜索以找到最接近的主题标签。