解读题:Textstat_similarity全泰达

Interpretation question: Textstat_similarity Quanteda

我有一个包含 310,225 条推文的数据集。我想找出有多少推文相同或相似。我使用 Quanteda 的 textstat 频率计算了推文之间的相似度。我发现相似度矩阵中距离1和0.9999的频率如下:

0.9999            1 
 2288           162743 

这是我的代码:

dfmat_users <- dfm_data %>% 
dfm_select(min_nchar = 2) %>% 
dfm_trim(min_termfreq = 10) 

dfmat_users <- dfmat_users[ntoken(dfmat_users) > 10,]

tstat_sim <- textstat_simil(dfmat_users, method = "cosine", margin = "documents", min_simil = 0.9998)

table(tstat_sim@x) #result of this code is given above.

我需要找出数据集中相似或相同推文的数量。我应该如何解释上面的结果?

最简单的方法是将 textstat_simil() 输出转换为 data.frame 唯一对,然后过滤余弦值高于阈值(此处为 .9999)的那些。

为了说明,我们可以将内置的就职演说语料库重塑成句子,然后计算这些句子的相似度矩阵,然后对data.frame进行强制转换并使用dplyr过滤你想要的结果。

library("quanteda", warn.conflicts = FALSE)
## Package version: 2.1.0.9000
## Parallel computing: 2 of 8 threads used.
## See https://quanteda.io for tutorials and examples.

sim_df <- data_corpus_inaugural %>%
  corpus_reshape(to = "sentences") %>%
  dfm() %>%
  textstat_simil(method = "cosine") %>%
  as.data.frame()

nrow(sim_df)
## [1] 12508670

您可以将以下数据条件调整为 0.9999 - 这里我以 0.99 为例。

library("dplyr", warn.conflicts = FALSE)
filter(sim_df, cosine > .99)
##            document1       document2 cosine
## 1    1861-Lincoln.69 1861-Lincoln.71      1
## 2    1861-Lincoln.69 1861-Lincoln.73      1
## 3    1861-Lincoln.71 1861-Lincoln.73      1
## 4  1953-Eisenhower.6   1985-Reagan.6      1
## 5  1953-Eisenhower.6    1989-Bush.15      1
## 6      1985-Reagan.6    1989-Bush.15      1
## 7      1989-Bush.140  2009-Obama.108      1
## 8      1989-Bush.140   2013-Obama.87      1
## 9     2009-Obama.108   2013-Obama.87      1
## 10     1989-Bush.140    2017-Trump.9      1
## 11    2009-Obama.108    2017-Trump.9      1
## 12     2013-Obama.87    2017-Trump.9      1

(而且:是的,这是对 1250 万个句子对之间余弦相似度的非常快速的计算!)