知识分享·NLP中一些有趣的trick

  • 1、计算文本相似度
    • 1.1 编辑距离
    • 1.2 杰卡德系数(Jaccard 相似系数)
    • 1.3 词频统计
    • 1.4 余弦相似度
    • 1.5 Word2Vec
  • 2、LDA
  • 3、文本聚类

1、计算文本相似度

1.1 编辑距离

import distancedef edit_distance(s1, s2):return distance.levenshtein(s1, s2)strings = ['你在干什么','你在干啥子','你在做什么','你好啊','我喜欢吃香蕉'
]target = '你在干啥'
results = list(filter(lambda x: edit_distance(x, target) <= 2, strings))
print(results)

1.2 杰卡德系数(Jaccard 相似系数)

from sklearn.feature_extraction.text import CountVectorizer
import numpy as npdef jaccard_similarity(s1, s2):def add_space(s):return ' '.join(list(s))# 将字中间加入空格s1, s2 = add_space(s1), add_space(s2)# 转化为TF矩阵cv = CountVectorizer(tokenizer=lambda s: s.split())corpus = [s1, s2]vectors = cv.fit_transform(corpus).toarray()# 求交集numerator = np.sum(np.min(vectors, axis=0))# 求并集denominator = np.sum(np.max(vectors, axis=0))# 计算杰卡德系数return 1.0 * numerator / denominators1 = '你在干嘛呢'
s2 = '你在干什么呢'
print(jaccard_similarity(s1, s2))

1.3 词频统计

from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
from scipy.linalg import normdef tf_similarity(s1, s2):def add_space(s):return ' '.join(list(s))# 将字中间加入空格s1, s2 = add_space(s1), add_space(s2)# 转化为TF矩阵cv = CountVectorizer(tokenizer=lambda s: s.split())corpus = [s1, s2]vectors = cv.fit_transform(corpus).toarray()# 计算TF系数return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))s1 = '你在干嘛呢'
s2 = '你在干什么呢'
print(tf_similarity(s1, s2))

1.4 余弦相似度

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from scipy.linalg import normdef tfidf_similarity(s1, s2):def add_space(s):return ' '.join(list(s))# 将字中间加入空格s1, s2 = add_space(s1), add_space(s2)# 转化为TF-IDF矩阵cv = TfidfVectorizer(tokenizer=lambda s: s.split())corpus = [s1, s2]vectors = cv.fit_transform(corpus).toarray()print(vectors)# 计算TF-IDF系数return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))s1 = '你在干嘛呢'
s2 = '你在干什么呢'
print(tfidf_similarity(s1, s2))

1.5 Word2Vec

import gensim
import jieba
import numpy as np
from scipy.linalg import normmodel_file = './word2vec/news_12g_baidubaike_20g_novel_90g_embedding_64.bin'
model = gensim.models.KeyedVectors.load_word2vec_format(model_file, binary=True)def vector_similarity(s1, s2):def sentence_vector(s):words = jieba.lcut(s)v = np.zeros(64)for word in words:v += model[word]v /= len(words)return vv1, v2 = sentence_vector(s1), sentence_vector(s2)return np.dot(v1, v2) / (norm(v1) * norm(v2))s1 = '你在干嘛'
s2 = '你正做什么'
print(vector_similarity(s1, s2))strings = ['你在干什么','你在干啥子','你在做什么','你好啊','我喜欢吃香蕉'
]target = '你在干啥'for string in strings:print(string, vector_similarity(string, target))

2、LDA

texts = [['苹果','叶子','椭圆形','树上'],['植物','叶子','绿色','落叶乔木'],['水果','苹果','红彤彤','味道'],['苹果','落叶乔木','树上','水果'],['植物','营养','水果','维生素'],['营养','维生素','苹果','成分'],['互联网','电脑','智能手机','高科技'],['苹果','公司','互联网','品质'],['乔布斯','苹果','硅谷'],['电脑','智能手机','苹果','乔布斯'], ['苹果','电脑','品质','生意'],['电脑','品质','乔布斯'],['苹果','公司','生意','硅谷']]dictionary = Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
model = models.ldamodel.LdaModel(corpus, id2word=dictionary,num_topics=2)
topic_list = ['水果','公司']
all_topics = model.get_document_topics(corpus, per_word_topics=True)cnt = 0
for doc_topics in all_topics:print('新文档:{} \n'.format(cnt),texts[cnt])doc_topics = [(topic_list[i[0]],i[1]) for i in doc_topics]print('文档主题:', doc_topics)print(' ')print('-------------- \n')cnt+=1
新文档:0 ['苹果', '叶子', '椭圆形', '树上']
文档主题: [('水果', 0.8769770939380782), ('公司', 0.12302290606192186)]

3、文本聚类

km = KMeans(n_clusters=4, init='k-means++', random_state=0)
label_prediction = km.predict(X)
label_prediction = list(label_prediction)print("每个聚类的TOP关键词:")
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()for i in range(4):print("簇群 %d   " % (i+1), end='')print("该簇群所含文档占比为",'%.4f%%' % (int(label_prediction.count(i))/int(len(df['words']))))print("簇群关键词:")for ind in order_centroids[i, :80]:print(' %s,' % terms[ind], end='')print('\n------------------------------------------------------------------------------------------------')
每个聚类的TOP关键词:
簇群 1   该簇群所含文档占比为 0.2310%
簇群关键词:手机, 荣耀, 王者, 图片, 下载, 视频, 世界, 游戏, 英雄, 百度, 电影, 电脑, 头像, 联盟, 皮肤, 软件, 意思, 漫画, 笔记本, 微信, 动漫, 小说, 男生, 直播, 手游, 苹果, 作战, 全集, 奥特曼, 小米, 官网, 密码, 少女, 破解版, 网名, 球球, 名字, 华为, 希尔, 会员, 助手, 设置, 观看, 本子, 安卓, 电视剧, 资源, 魅族, 先锋, 腾讯, 女生, 攻略, 纹身, 福利, 系统, 路由器, 耳机, 生活, 中国, 歌曲, 宽带, 移动, 连接, 歌词, 显卡, 守望, 三星, 影院, 战争, 时候, 照片, 淘宝, 账号, 不能, 部落, 客服, 演员表, 蓝牙, 升级, 查询,
------------------------------------------------------------------------------------------------
簇群 2   该簇群所含文档占比为 0.1050%
簇群关键词:小说, 重生, 怀孕, 穿越, 总裁, 书包, 全文, 阅读, 都市, 男主, 女主, 洪荒, 倾城, 下载, 类似, 老公, 孕妇, 系统, 网游, 王爷, 免费, 王妃, 末世, 后宫, 极品, 豪门, 漫画, 胎儿, 皇后, 宝宝, 红楼, 排卵, 图片, 电影, 宠文, 世界, 会计, 风流, 电视剧, 意思, 老婆, 宝贝, 手机, 霸道, 神医, 妖孽, 绝色, 美文, 结局, 男孩, 孕酮, 游戏, 无限, 修仙, 异界, 公主, 动漫, 火影, 特工, 完结, 军婚, 月经, 胎心, 公子, 子宫, 妈咪, 美女, 格林童话, 炮灰, 百度, 全集, 绝世, 小姐, 养成, 闪婚, 主叫, 娱乐圈, 修真, 白带, 杀手,
------------------------------------------------------------------------------------------------
簇群 3   该簇群所含文档占比为 0.3290%
簇群关键词:意思, 英语, 作文, 图片, 中国, 英文, 大学, 翻译, 读音, 手机, 成语, 学院, 答案, 视频, 倾城, 歌词, 句子, 下载, 电影, 小说, 上册, 组词, 北京, 时间, 软件, 头像, 开头, 天津, 歌曲, 世界, 百度, 电视剧, 女生, 描写, 直播, 查询, 表情, 赵丽颖, 高考, 成都, 数学, 时候, 游戏, 拼音, 官网, 杨洋, 照片, 词语, 阅读, 学校, 王宝强, 乔任梁, 近义词, 故事, 快递, 考试, 漫画, 工作, 老师, 马蓉, 微信, 上海, 职业, 小学, 教育, 开学, 个人资料, 荣耀, 合肥, 中学, 区别, 不能, 南昌, 内容, 学生, 苹果, 免费, 英雄, 淘宝, 阴阳师,
------------------------------------------------------------------------------------------------
簇群 4   该簇群所含文档占比为 0.3350%
簇群关键词:图片, 上海, 宝宝, 做法, 功效, 价格, 意思, 作用, 汽车, 手机, 北京, 信用卡, 视频, 苹果, 症状, 有限公司, 招聘, 中国, 查询, 广州, 公交车, 时间, 深圳, 官网, 电视剧, 医院, 快递, 郑州, 梦见, 路线, 西安, 原因, 月经, 杭州, 时刻表, 公司, 广场, 电话, 微信, 怀孕, 区别, 电影, 婴儿, 报价, 厦门, 火车, 下载, 小说, 治疗, 倾城, 方法, 星座, 机场, 时候, 品牌, 南京, 摩托车, 韩国, 华为, 地铁, 新生儿, 直播, 孕妇, 济南, 月饼, 银行, 眼睛, 牌子, 照片, 面膜, 集团, 个人资料, 不能, 歌词, 科技, 需要, 适合, 常州, 淘宝, 好吃,
------------------------------------------------------------------------------------------------

知识分享·NLP中一些有趣的trick相关推荐

  1. springboot中药知识分享网站设计 毕业设计-附源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  2. 企业知识分享系统的设计与实现

    摘  要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...

  3. springboot中药知识分享网站毕业设计源码201818

    摘  要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安全的信息保护都使得电子 ...

  4. 本周知识分享会议总结

    2020年7月第三周知识分享汇总 DQ的项目经验分享 项目过程的介绍 项目中遇到的问题 项目中的知识分享 项目中的工具分享 HXD的数据仓库知识分享 数据仓库 ETL的概念 kettle的案例 课程质 ...

  5. vba 跳到下一个循环_VBA野知识分享:从一个数组中取部分值生成新数组,不使用循环的思路...

    从一个数组中取部分值生成新数组,要实现此需求通常都是采用循环的方法来完成,那有没有更简易的思路呢? 借用jscript可以实现,直接取值,不用循环.例如从100000万中元素是取8000个值出来生成新 ...

  6. 知识分享之PostgreSQL——数据库中的模式(Schema)

    知识分享之PostgreSQL--数据库中的模式(Schema) 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列 ...

  7. NLP中数据增强的综述,快速的生成大量的训练数据

    作者:amitness编译:ronghuaiyang 导读 深度学习视觉领域的增强方法可以很大程度上提高模型的表现,并减少数据的依赖,而NLP上做数据增强不像在图像上那么方便,但还是有一些方法的. 与 ...

  8. 一篇了解NLP中的注意力机制

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | AI小白入门(公众号ID: StudyForAI) 作者 | yuquanle,985在读硕 ...

  9. Word2Vec揭秘: 这是深度学习中的一小步,却是NLP中的巨大跨越

    作者:Suvro Banerjee编译:ronghuaiyang 导读 做NLP现在离不开词向量,词向量给了我们一个非常好的单词的向量表示,用一个有限长度的向量,可以表示出所有的词,还可以表示出词与词 ...

最新文章

  1. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
  2. poj 1637(混合图求欧拉回路)
  3. 防重 Token 令牌如何实现幂等性?
  4. 从cpp向qml文件传中文字符串的方法
  5. Python应用实战-用Highcharts实现可视化分析
  6. php delegate,jQuery中delegate()方法的用法详解
  7. SOAP协议初级指南(7)
  8. 【Unity】制作剧情向游戏使用Fungus插件
  9. 磁共振影像分析之: 基于FSL的VBM分析(2)
  10. Asterisk G729编码支持
  11. CSS相对定位和绝对定位
  12. Mysql添加报错 MySqlException: Incorrect string value: ‘\xE5\xAF\xBC\xE5\x85\xA5...‘ for
  13. 【POJ】1003_Hangover宿醉
  14. oracle数据库表空间如何清理,oracle数据库清理临时表空间
  15. 我的世界服务器物品不丢弃,《我的世界》怎样处理没用的物品,这六个销毁物品方法了解一下!...
  16. 基于STM32的ESP8266模块控制多路继电器
  17. screen 状态为Attached
  18. D17 LeetCode 2043.简易银行系统(中等)
  19. 自动生成中小学数学题目的控制台小程序
  20. node.js源码编译安装(linux)

热门文章

  1. 艾伟也谈项目管理,工作感言:任务分配及管理
  2. C中的strlen()函数说明,以及使用时要注意事项
  3. 《Going Deeper with Convolutions》阅读笔记
  4. 也谈B2B网站的发展方向和趋势
  5. 史上最好用的SEO工具之一ahrefs
  6. win10中搭建并配置ftp服务器的方法(实现多用户登录整合版)
  7. 光头老法师手持尼康却能玩出佳能的效果
  8. java学习之服务器第26天( --form表单-- 四大域对象--cookie)
  9. 并发模拟的四种方式+工具,超级实用!
  10. 欧洲服务器与美国服务器哪个比较好呢?