[英]classify duplication using decision tree
我在这里看到几个问题:
决策树是监督学习方法,这意味着它们需要标签。 您的问题似乎没有任何标签(这不是分类问题,您将评论归为什么?唯一性不是类别! )
决策树需要在数据中寻找模式,但你的数据中的模式是什么? 它应该如何区分“它正在崩溃”和“小图标” ? 什么特征将这两个句子分开? 再说一次, Uniqueness太宽泛了!
为了解决您的问题,您需要使用无监督学习方法。 首先通过查找类似的注释来检测数据中的重复项。 这可以通过各种方法和库来完成。 这里描述了一些。
例如,一种方法是使用cosine_similarity :
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
comments_df = pd.DataFrame(data = {'Comment': ['Crash', 'It is crashing', 'Always crash', 'Small icon'], 'Unique': ['Y', 'N', 'N', 'Y']})
X = TfidfVectorizer().fit_transform(list(comments_df["Comment"].values))
threshold = 0.4
for i in range(0, X.shape[0]):
for j in range(i, X.shape[0]):
if i != j:
sim_score = cosine_similarity(X[i], X[j])
if sim_score > threshold:
print(f"\"{comments_df.iloc[i]['Comment']}\", \"{comments_df.iloc[j]['Comment']}\"")
print(f"Cos similarity: {sim_score}\n")
输出:
"Crash", "Always crash"
Cos similarity: [[0.6191303]]
您还可以使用spaCy :
import spacy
nlp = spacy.load("en_core_web_sm")
comments_df = pd.DataFrame(data = {'Comment': ['Crash', 'It is crashing', 'Always crash', 'Small icon'], 'Unique': ['Y', 'N', 'N', 'Y']})
threshold = 0.4
for i in range(comments_df.shape[0]):
for j in range(i, comments_df.shape[0]):
if i != j:
doc1 = nlp(comments_df.iloc[i]['Comment'])
doc2 = nlp(comments_df.iloc[j]['Comment'])
similary_score = doc1.similarity(doc2)
if similary_score > threshold:
print(f"\"{comments_df.iloc[i]['Comment']}\", \"{comments_df.iloc[j]['Comment']}\"")
print(f"Similarity: {similary_score}\n")
这将输出:
"Crash", "Always crash"
Similarity: 0.5155057238138886
"Crash", "Small icon"
Similarity: 0.5194295610092798
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.