gpt4 book ai didi

java - 如何搜索语料库以查找字符串的频率?

转载 作者:行者123 更新时间:2023-12-01 13:09:10 26 4
gpt4 key购买 nike

我正在从事一个 NLP 项目,我想搜索文本语料库以尝试找到给定动词-宾语对的频率。

我们的目标是在给出几种不同的可能性时找到最有可能的动词-宾语对。例如,如果给定字符串“Swing the Stick”和“Eat the Stick”,我希望语料库能够显示某人挥动一根棍子的可能性比吃一根棍子的可能性大得多。

我一直在阅读有关 n-gram 和语料库语言学的内容,但我正在努力寻找使用 Java 执行此类搜索的方法,是否有任何可能有用的 API?

最佳答案

如果您正在寻找字符串相关性和频率,您也许可以使用使用 TF-IDF 指标和余弦相似度的非常简单的模型。我认为如果你将字符串分成小块,并让每个字符串代表一个文档,你可以用一种非常简单的方式来做到这一点。

简而言之,TF 是词频 - 计算某个单词在给定文档中存在的总次数。因此,考虑您的示例,并向其中添加更多信息:

文档1:挥动棍子。吃胡萝卜棒。

文档2:挥动口香糖棒。

TF 值为:文档1:

swing: 1
the: 2
stick: 2
eat: 1
of: 1
carrot: 1

文档2:

swing:1
the:1
stick:1
of:1
gum:1

IDF 是逆文档频率。哪个是 - 给定的单词存在于多少个文档中?该度量标准用于帮助我们删除诸如“the”和“of”之类非常频繁的单词,但不会给我们提供大量语言信息。

回到你的例子:文档1:挥动棍子。吃胡萝卜棒。

文档2:挥动口香糖棒。

IDF 值为(所有文档通用):

swing: 2 (it occurs in 2 documents)
the: 2
stick: 2
eat: 1
of: 2
carrot: 1
gum:1

使用此计算文档中每个单词的 TF * IDF 值,并开发一个 vector 来表示文档:swing:2(出现在2个文档中)

文档1:

the: (TF:2 * IDF:2) = 4 
stick: (TF:2 * IDF:2) = 4
eat: (TF: 1 * IDF:1) = 1
of: (TF: 1 * IDF:2) = 2
carrot: (TF: 1 * IDF:1) = 1
gum:(TF:0 * IDF:1) = 0 (gum doesnt exist in doc1 so TF=0)

文档2:

the: (TF:1 * IDF:2) = 2
stick: (TF:1 * IDF:2) = 2
eat: (TF:0 * IDF:1) = 0
of: (TF:1 * IDF:2) = 2
carrot: (TF:0 * IDF:1) = 0
gum:(TF:1 * IDF:1) =1

现在您已经有了代表每个文档的 vector ,您可以通过计算 vector 之间的点积来计算 vector 之间的角度,从而计算它们之间的相似度。

文档2。 Doc1 =(顺序无关紧要)

the = (doc2: 2 * doc1: 4) = 8
stick: (doc2: 2 * doc1: 4) = 8
eat: (doc2: 0 * doc1: 1) = 0
of: (doc2: 2 * doc1: 2) = 4
carrot: (doc2: 0 * doc1: 1) = 0
gum:(doc2:1 * doc1: 0) = 0

vector 的大小是两个 vector 之间的平方和的平方根:在这种情况下,Doc1和Doc 2之间的距离大小为:

root(8^2 + 8^2 + 0^2 + 4^2 + 0^2 + 0^2) = 12

一旦您了解了所有文档或字符串之间的距离大小,您就可以找出哪些文档或字符串最相似,并且最有可能相邻出现。两根弦之间的距离越小,它们就越近。如果两个弦的大小比较接近,则它们相似。

TF 和 IDF 分数通常会转换为对数值,以便轻松计算其下游函数。

斯坦福信息检索一书中有一个很棒的教程(第 6 章),可以在这里找到:http://nlp.stanford.edu/IR-book/

此外,还有一些 Perl 代码,以及一些快速而肮脏的解释: http://nlp-stuff.blogspot.com/2012/09/toy-example-for-computing-document.html http://nlp-stuff.blogspot.com/2012/09/toy-example-for-computing-tfidf.html

关于java - 如何搜索语料库以查找字符串的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com