Python相似度问答代码
时间: 2024-12-27 15:20:18 浏览: 6
### Python 实现相似度问答系统的代码示例
为了构建基于相似度的问答系统,通常会采用自然语言处理(NLP)技术来衡量问题之间的语义距离。下面是一个简单的例子,展示了如何利用 `sklearn` 和 `gensim` 库中的工具来进行文本向量化并计算余弦相似度。
#### 导入必要的库
```python
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from gensim import similarities
```
#### 准备数据集
定义一组预设的问题作为数据库,以及一个新的输入问题用于查询。
```python
corpus = [
"What is the capital of France?",
"Tell me about Paris.",
"How do you spell 'accommodation'?",
"Who wrote Hamlet?"
]
new_question = ["Can you tell me more on paris?"]
```
#### 创建TF-IDF模型
使用 TF-IDF 向量器将文档转换成数值型特征向量表示形式。
```python
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(corpus)
print(tfidf_matrix.shape) # 输出矩阵大小
```
#### 计算新问句与已有问题间的相似度得分
对于新的提问,同样应用相同的变换过程得到其对应的稀疏向量表达;接着通过线性代数运算求得两者间夹角余弦值,以此评估它们之间有多接近。
```python
query_tfidf = vectorizer.transform(new_question)
cosine_similarities_of_query = []
for i in range(len(corpus)):
cosine_similarity = np.dot(query_tfidf.toarray()[0], tfidf_matrix[i].toarray()) / (np.linalg.norm(query_tfidf.toarray()[0]) * np.linalg.norm(tfidf_matrix[i].toarray()))
cosine_similarities_of_query.append(cosine_similarity)
best_match_index = int(np.argmax(cosine_similarities_of_query))
print(f"The most similar question to '{new_question[0]}' is: {corpus[best_match_index]}")[^1]
```
上述方法仅适用于小型静态的知识库,在实际应用场景中可能还需要考虑动态更新索引、优化性能等问题。此外,也可以探索更先进的算法比如BERT等深度学习模型以获得更好的效果[^3]。
阅读全文