关于自然语言处理之One Hot模型
最近工作实在有点忙,前阵子关于梯度和导数的事情把人折腾的够呛,数学学不好,搞机器学习和神经网络真是头疼;想转到应用层面轻松一下,想到了自然语言处理,one hot模型是基础也是入门,看起来很简单的一个列表转矩阵、词典的功能,想着手工实现一下,结果看了一下CountVectorizer,发现不是那么回事儿,还是放弃了。
顾名思义,单热表示从一个零向量开始,如果单词出现在句子或文档中,则将向量中的相应条目设置为 1。
对句子进行标记,忽略标点符号,并将所有的单词都用小写字母表示,就会得到一个大小为 8 的词汇表: {time, fruit, flies, like, a, an, arrow, banana} 。所以,我们可以用一个八维的单热向量来表示每个单词。在本书中,我们使用 1[w] 表示标记/单词 w 的单热表示。
对于短语、句子或文档,压缩的单热表示仅仅是其组成词的逻辑或的单热表示。短语 like a banana 的单热表示将是一个 3×8 矩阵,其中的列是 8 维的单热向量。通常还会看到“折叠”或二进制编码,其中文本/短语由词汇表长度的向量表示,用 0 和 1 表示单词的缺失或存在。like a banana 的二进制编码是: [0,0,关于0,1,1,0,0,1] 。
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer import seaborn as sns import matplotlib.pyplot as plt import jieba import jieba.analyse # 单热表示从一个零向量开始,如果单词出现在句子或文档中,则将向量中的相应条目设置为 1。 # 英文的处理和展示 corpus = ['Time flies flies like an arrow.', 'Fruit flies like a banana.'] one_hot_vectorizer&n自然bsp;= CountVectorizer(binary=True) one_hot = one_hot_vectorizer.fit_transform(corpus).toarray() sns.heatmap(one_hot, annot=True, cbar=False, yticklabels=['Sentence 1', 'Sentence 2']) plt.show()
# 中文的处理和展示 # 获取停用词列表 def get_stopwords_list(stopwordfile): stopwords = [line.strip() for line in open(stopwordfile, encoding='UTF-8').readlines()] &nbs语言p; return stopwords # 移除停用词 def movestopwords(sentence): stopwords = get_stopwords_list('stopwords.txt') # 这里加载停用词的路径 santi_words = [x for x in sentence if len(x) > 1 and x not in stopwords] return santi_words # 语料 corpus = ["小明硕士毕业于中国科学院计算所,后处理在日本京都大学深造。", "小王本科在清华大学,后在南京计算所工作和深造,后在日本早稻田大学深造", "小李本科在清华大学,硕士毕业于中国科学院计算所,博士在南京大学"] newcorpus = [] for str in corpus: orgwordlist = jieba.lcut(str) # jieba分词 wordlist = movestopwords(orgwordlist) # 移除停用词 之Onewword = " ".join(wordlist) # 按照语料库要求进行空格分隔 newcorpus.append(newword) # 按照语料库要求转换成列表 # newcorpus # ['小明 硕士 毕业 中国科学院 计算所 日本京都大学 深造', # '小王 本科 清华大学 南京 计算所 工作 深造 日本早稻田大学 深造', # '小李 本科 清华大学 硕士 毕业 中国科学院 计算所 博士 南京大学'] one_hot_vectorizer = CountVectorizer(binary=True) &nnebsp;# 创建词袋数据结构 one_hot = one_hot_vectorizer.fit_transform(newcorpus).toarray() # 转换语料,并矩阵化 # 下面为热词的输出结果 # one_hot_vectorizer.vocabulary_ # {'小明': 4, '˶ʿ': 14, '毕业': 11, '中国科学院': 0, '计算所': 15, '日本京都大学': 8, '深造': 12, '小王': 6, '本科': 10, '清华大学': 13, '南京': 1, '工作': 7, '日本早稻田大学': 9, '小李': 5, '博士': 3 H, '南京大学': 2} # one_hot_vectorizer.get_feature_names() # ['中国科学院', '南京', '南京大学', '博士', '小明', '小李', '小王', '工作', '日本京都大学', '日本早稻田大学', '本科', '毕业', '深造', '清华大学', '˶ʿ', '计算所'] # one_hot # [[1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1] # [0 1 0 0 0 0 1 1 0 1 1 ot;0 1 1 0 1] # [1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 1]] sns.set_style({'font.sans-serif': ['SimHei', 'Arial']}) sns.heatmap(one_hot, annot=True, cbar=False, xticklabels=one_hot_vectorizer.get_feature_names(), yticklabels=['语句1', '语句2', '语句3']) plt.show()
IDF 表示惩罚常见的符号模型,并奖励向量表示中的罕见符号。符号 w 的 IDF(w) 对语料库的定义为其中 n[w] 是包含单词 w 的文档数量, N 是文档总数。TF-IDF 分数就是 TF(w) * IDF(w) 的乘积。首先,请注意在所有文档(例如, n[w] = N ), IDF(w) 为 0, TF-IDF 得分为 0,完全惩罚了这一项。其次,如果一个术语很少出现(可能只出现在一个文档中),那么 IDF 就是 log n 的最大值
tfidf_vectorizer = TfidfVectorizer() # 创建词袋数据结构 tfidf = tfidf_vectorizer.fit_transform(newcorpus).toarray() # 转换语料,并矩阵化 # 下面为热词的输出结果 # tfidf_vectorizer.vocabulary_ # '小明': 4, '˶ʿ': 14, '毕业': 11, '中国科学院': 0, 关于'计算所': 15, '日本京都大学': 8, '深造': 12, '小王': 6, '本科': 10, '清华大学': 13, '南京': 1, '工作': 7, '日本早稻田大学': 9, '小李': 5, '博士': 3, '南京大学': 2} # tfidf_vectorizer.get_feature_names() # ['中国科学院', '南京', '南京大学', '博士', '小明', '小李', '小王', '工作', '日本京都大学', '日本早稻田大学', '本科', '毕业', '深造', '清华大学', '˶ʿ', '计算所'] # tfidf自然 # [[0.35221512 0. 0. 0. 0.46312056 0. 0. 0. 0.46312056 0. 0. 0.35221512 0.35221512 0. &语言nbsp; 0.35221512 0.27352646] # [0. 0.35761701 0. 0. 0. 0. 0.35761701 0.35761701 0. 0.35761701 0.27197695 0. 0.54395391 0.27197695处理 0. 0.21121437] # [0.30443385 0. 0.40029393 0.40029393 0. 0.40029393 0. 0. 0. 0. 0.30443385&之Onbsp;0.30443385 0. 0.30443385 0.30443385 0.23642005]] sns.heatmap(tfidf, annot=True, cbar=False, xticklabels=tfidf_vectorizer.get_feature_names(), yticklabels=['语句1', '语句2', '语句3'], vmin=0, vmax=1, cm
-
阿里"通义点金"重磅出击!32B模型霸榜金融AI,2000亿美元市场蛋糕谁来分?苹果遇大麻烦:生产链转移至印度计划破产?iPhone产量暴跌超50%腾讯云推出“企业直播” 打通公域流量与私域运营标签: 博迈医疗 创业板IPO 医疗器械 腾讯创投包青天"智能重生"!华南师大发布国内首个法律AI大模型,2亿裁判文书秒变法律助手开启生成式视频压缩:谷歌基于GAN来实现,性能与HEVC相当涓婃捣浜ゅぇ寮€婧愯�缁冩�鏋讹紝鏀�寔澶ц�妯″熀浜庣�缇ゅ�鏅鸿兘浣撳己鍖栧�涔犺�缁�月之暗面发布Kimi Linear架构:KV缓存减少75%,推理速度提升6倍,Attention机制迎来颠覆性革新!标签: 豆包 千问 通义千问 AI智能体标签: MiniMax 声网 TTS技术 实时AI
- ·仅头发丝1/200厚度!科学家搭建「纳米线网络」,触电像大脑运作
- ·标签: 迪哲医药 舒沃替尼 戈利昔替尼 NSCLC
- ·标签: 小米通话 停止服务 音视频
- ·Anthropic2028年营收或达700亿美元,现金流碾压OpenAI
- ·内存涨价潮下,阿里云李飞飞详解PolarDB“AI就绪”如何实现“降本增效”
- ·AI 摘要与社交媒体双重夹击:维基百科人工流量骤降8% 敲响警钟
- ·发生在UPS电源使用中的几种常见报警
- ·标签: 商汤-W 多模态大模型 Agent原生 物理AI
- ·标签: 电动两轮车
- ·Nscale 数据中心初创企业与微软达成 140 亿美元合作,谋求上市
- ·GPT-4参数将达10兆!此表格预测全新语言模型参数将是GPT-3的57倍
- ·Facebook在多家报纸刊登整版广告:抨击苹果调整数据政策
- ·Docker Desktop 4.14 中的新功能:更好地了解您的容器
- ·斑鸠哥是什么梗
- ·濡備綍閫夋嫨鍩轰簬浜戠殑CI/CD骞冲彴?
- ·谷歌AI搜索模式杀入西班牙语市场:全球扩张加速,直面ChatGPT竞争白热化
- ·标签: 英伟达 新思科技 EDA AI芯片
- ·标签: PCB 胜宏科技 英伟达 人工智能服务器
- ·节省显存新思路,在 PyTorch 里使用 2 bit 激活压缩训练神经网络
- ·新一代 Kimi K2.6 上线遭遇功能问题,月之暗面重置用户额度作为补偿
- ·标签: 中国电信 天翼星盾 低空经济 AI+
- ·时隔近50年,剑桥团队首次检测到量子自旋液体,研究登上《Science》
- ·标签: KOM3.0 擎朗智能 机器人 WRC 2026世界机器人大会
- ·阿里巴巴投资者日:全球化业务MAU全球第四 云计算物流海外发展加速
- ·北京查处首例AI虚假广告案:AI 冒充知名主持人卖鱼油
- ·Meta 挖角Thinking Machines Lab联合创始人
- ·云计算核心技术Docker教程:Docker使用卷持久化数据
- ·OpenAI 即将推出AI版TikTok,全网视频内容将由AI创造
- ·标签: 英伟达 黄仁勋 AI五层架构 DeepSeek-R1
- ·印度AI大战白热化!谷歌豪送18个月Gemini Pro,OpenAI推免费ChatGPT Go,巨头“烧钱”抢10亿用户
- ·酒店打扑克什么梗
- ·谷歌流量显著下降,People Inc. 与微软达成 AI 内容授权协议
- ·标签: 宇树科技 GD01 载人机甲 变形机甲
- ·标签: 网易云音乐 黑胶会员 家庭会员 学生VIP
- ·标签: 蓝思科技 AI智能终端 智能手机 智能汽车
- ·标签: 天数智芯 天垓Gen2 智铠系列 AI算力解决方案
