# 豆瓣中文影评差评分析
> [链接](https://juejin.cn/post/7022202104454316046)
### 1. NLP
NLP(Natural Language Processing)是指自然语言处理,他的目的是让计算机可以听懂人话。
下面是我将2万条豆瓣影评训练之后,随意输入一段新影评交给神经网络,最终AI推断出的结果。
```python
"很好,演技不错", 0.91799414 ===>好评
"要是好就奇怪了", 0.19483969 ===>差评
"一星给字幕", 0.0028086603 ===>差评
"演技好,演技好,很差", 0.17192301 ===>差评
"演技好,演技好,演技好,演技好,很差" 0.8373259 ===>好评
```
看完本篇文章,即可获得上述技能。
### 2. 读取数据
首先我们要找到待训练的数据集,我这里是一个csv文件,里面有从豆瓣上获取的影视评论50000条。
他的格式是如下这样的:
| 名称 | 评分 | 评论 | 分类 |
| --- | --- | --- | --- |
| 电影名 | 1分到5分 | 评论内容 | 1 好评,0 差评 |
部分数据是这样的:
![](https://www.writebug.com/myres/static/uploads/2022/1/17/52e5f636b0778e0fb8932d4c45c86a2b.writebug)
代码是这样的:
```python
# 导入包
import csv
import jieba
# 读取csv文件
csv_reader = csv.reader(open("datasets/douban_comments.csv"))
# 存储句子和标签
sentences = []
labels = []
# 循环读出每一行进行处理
i = 1
for row in csv_reader:
# 评论内容用结巴分词以空格分词
comments = jieba.cut(row[2])
comment = " ".join(comments)
sentences.append(comment)
# 存入标签,1好评,0差评
labels.append(int(row[3]))
i = i + 1
if i > 20000: break # 先取前2万条试验,取全部就注释
# 取出训练数据条数,分隔开测试数据条数
training_size = 16000
# 0到16000是训练数据
training_sentences = sentences[0:training_size]
training_labels = labels[0:training_size]
# 16000以后是测试数据
testing_sentences = sentences[training_size:]
testing_labels = labels[training_size:]
```
这里面做了几项工作:
1. 文件逐行读入,选取评论和标签字段。
2. 评论内容进行分词后存储。
3. 将数据切分为训练和测试两组。
#### 2.1 中文分词
重点说一下分词。
分词是中文特有的,英文不存在。
下面是一个英文句子。
> This is an English sentence.
请问这个句子,有几个词?
有6个,因为每个词之间有空格,计算机可以轻易识别处理。
| This | is | an | English | sentence | . |
| --- | --- | --- | --- |--- | --- |
| 1 | 2 | 3 | 4 |5 | 6 |
下面是一个中文句子。
> 欢迎访问我的掘金博客。
请问这个句子,有几个词?
恐怕你得读几遍,然后结合生活阅历,才能分出来,而且还带着各类纠结。
今天研究的重点不是分词,所以我们一笔带过,采用第三方的结巴分词实现。
**安装方法**
*代码对 Python 2/3 均兼容*
- 全自动安装:`easy_install jieba` 或者 `pip install jieba` / `pip3 install jieba`
- 半自动安装:先下载 <http://pypi.python.org/pypi/jieba/> ,解压后运行 `python setup.py install`
- 手动安装:[下载代码文件](https://gitee.com/bigcool/stutter-participle)将 jieba 目录放置于当前目录或者 site-packages 目录
- 通过 `import jieba` 来引用
引入之后,调用`jieba.cut("欢迎访问我的掘金博客。")`就可以分词了。
```python
importjieba
words=jieba.cut("欢迎访问我的掘金博客。")
sentence="".join(words)
print(sentence)#欢迎访问我的掘金博客。
```
为什么要有分词?因为词语是语言的最小单位,理解了词语才能理解语言,才知道说了啥。
对于中文来说,同一个的词语在不同语境下,分词方法不一样。
关注下面的“北京大学”:
```python
importjieba
sentence="".join(jieba.cut("欢迎来北京大学餐厅"))
print(sentence)#欢迎来北京大学餐厅
sentence2="".join(jieba.cut("欢迎来北京大学生志愿者中心"))
print(sentence2)#欢迎来北京大学生志愿者中心
```
所以,中文的自然语言处理难就难在分词。
*至此,我们的产物是如下格式:*
```
sentences = ['我喜欢你','我不喜欢他',……]
labels = [0,1,……]
```
### 3. 文本序列化
文本,其实计算机是无法直接认识文本的,它只认识0和1。
你之所以能看到这些文字、图片,是因为经过了多次转化。
就拿字母A来说,我们用65表示,转为二进制是0100 0001。
|二进制 |十进制 |缩写/字符| 解释 |
| :-------: | :--: | :-: | :---- |
| 0100 0001 | 65 | A | 大写字母A |
| 0100 0010 | 66 | B | 大写字母B |
| 0100 0011 | 67 | C | 大写字母C |
| 0100 0100 | 68 | D | 大写字母D |
| 0100 0101 | 69 | E | 大写字母E |
当你看到A、B、C时,其实到了计算机那里是0100 0001、0100 0010、0100 0011,它喜欢数字。
*Tips:这就是为什么当你比较字母大小是发现 A<B ,其实本质上是65<66。*
那么,我们的准备好的文本也需要转换为数字,这样更便于计算。
#### 3.1 fit_on_texts 分类
有一个类叫Tokenizer,它是分词器,用于给文本分类和序列化。
这里的分词器和上面我们说的中文分词不同,因为编程语言是老外发明的,人家不用特意分词,他起名叫分词器,就是给词语分类。
```python
fromtensorflow.keras.preprocessing.textimportTokenizer
sentences=['我喜欢你','我不喜欢他']
# 定义分词器
tokenizer=Tokenizer()
# 分词器处理文本,
tokenizer.fit_on_texts(sentences)
print(tokenizer.word_index) # {'我':1,'喜欢':2,'你':3,'不':4,'他':5}
```
上面做的就是找文本里有几类词语,并编上号。
看输出结果知道:2句话最终抽出5种不同的词语,编号1~5。
#### 3.2 texts_to_sequences 文本变序列
文本里所有的词语都有了编号,那么就可以用数字表示文本了。
```python
# 文本转化为数字序列
sequences=tokenizer.texts_to_sequences(sentences)
print(sequences)#[[1,2,3],[1,4,2,5]]
```
这样,计算机渐渐露出了笑容。
#### 3.3 pad_sequences 填充序列
虽然给它提供了数字,但这不是标准的,有长有短,计算机就是流水线,只吃统一标准的数据。
pad_sequences 会把序列处理成统一的长度,默认选择里面最长的一条,不够的补0。
```python
fromtensorflow.keras.preprocessing.sequenceimportpad_sequences
# padding='post'后边填充,padding='pre'前面填充
padded=pad_sequences(sequences,padding='post')
print(padded)#[[1 2 3] [1 4 2 5]] -> [[1230][1425]]
```
这样,长度都是一样了,计算机露出了开心的笑容。
少了可以补充,但是如果太长怎么办呢?
太长可以裁剪。
```python
# truncating='post'裁剪后边,truncating='pre'裁剪前面
padded=pad_sequences(sequences,maxlen=3,truncating='pre')
print(padded)#[[1,2,3],[1,4,2,5]]->[[123][425]]
```
*至此,我们的产物是这样的格式:*
```
sentences = [[1 2 3 0] [1 4 2 5]]
labels = [0,1,……]
```
### 4. 构建模型
所谓模型,就是流水线设备。我们先来看一下流水线是什么感觉。
![](https://www.writebug.com/myres/static/uploads/2022/1/17/1e4257e15d49a19b399f217d19dfa9a5.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/17/848570eaffa76dc14c584b8a0ee05741.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/17/174a5e8421e068ace44e718a6ddeb064.writebug)
看完了吧,流水线的作用就是进来固定格式的原料,经过一层一层的处理,最终出去固定格式的成品。
模型也是这样,定义一层层的“设备”,配置好流程中的各项“指标”,等待上线生产。
```python
# 构建模型,定义各个层
model=tf.keras.Sequential([
tf.keras.layers.Embedding(vocab_size,embedding_dim,input_length=max_length),
tf.keras.layers.GlobalAveragePooling1D
没有合适的资源?快使用搜索试试~ 我知道了~
基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip
共5个文件
txt:1个
py:1个
csv:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 76 浏览量
2023-04-18
13:27:04
上传
评论 2
收藏 3.52MB ZIP 举报
温馨提示
基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip 基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于tensorflow keras DNN神经网络训练预测豆瓣中文影评差评好评项目.zip (5个子文件)
新建文本文档.txt 4B
douban_embedding
main.py 5KB
LICENSE 1KB
douban_comments.csv 6.38MB
README.md 14KB
共 5 条
- 1
资源评论
- 五分熟青年2023-10-15超级好的资源,很值得参考学习,对我启发很大,支持!
手把手教你学AI
- 粉丝: 7771
- 资源: 4956
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 4399GameSem_116_13955_207551_6.apk
- python 3.9.19源码编译包
- php-8.2.18-Win32-vs16-x64.rar
- 字节跳动青训营-抖音项目
- SQL资料手册,语句教程,高级查询语句语法
- 上位机和串口建立 Modbus 协议进行数据传输,并使用 Mysql 数据库存储,能够实现实时温湿度显示和动态变化曲线,历史数据
- Attachment 1_chazhi.xlsx
- 安卓项目,实现虚拟摇杆通过wifi串口发送nema-0183协议实现小吊舱方向控制
- 基于modbus协议的大屏数据监控,使用modbus slave模拟数据,串口服务器获取温湿度
- 下载资源.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功