微博コーパスの感情分析

目次

独自性の表明

第 1 章 はじめに

1.1 研究の背景

1.2 主題研究

第 1 章 感情分析の準備

2.1 感情分析の知識ベース

2.2 SnowNLP ライブラリ

2.3 Word2vec メソッド

2.3 単語ベクトルの動作原理

第三章はよく考えなかった…

第4章 思いもよらなかった…

第5章 考えもしなかった…

最後に書く:

チャットが出てきたらすぐに、コーダーは死んでいます。コードはここにあります。それを取り除いてください!

Word2vec の方法:

SnowNLP を直接呼び出す

参考文献:


独自性の表明

        私は非常に興味を持ってこの実験を完了し、NLP の現在の関連技術に関する私の簡単な理解と予備的な見解をいくつか追加しました. いくつかのローカル言語の説明はあまり深刻ではありません. 時間を節約するために、ディスカッション実験ではいくつかの研究結果と学術論文の理論を紹介したため、一部は私に独創的ではなく、これらの結果の出典を特に示しませんでしたが、学習態度で主張しました.そのようなレポートなので、これは正式な学位論文レポートとは見なされません。ちなみに、あまり正確ではない言葉もあるかもしれませんが、説得力があると思うので使っていますので、掘り下げる必要はありません。精査に耐えられないものを見てください。ですので、不備がありましたらご連絡ください。

第 1 章 はじめに

1.1 研究の背景

        コンピュータ技術の急速な発展に伴い、人々は人工知能の時代に入りました。特に、アメリカの人工知能研究所OpenAIが新たに立ち上げた人工知能技術を駆使した自然言語処理( Natural Language Processing )ツールであるChatGPTは、今年非常に人気が高く、 ChatGPT技術の登場により人工知能技術の応用が進んでいます。言語の相互作用はますます広範になり、ますます広まっていきます。twitterでは、 ChatGPTを使用したユーザーからのフィードバックによると、21 年間のコーパス トレーニングに基づくChatバージョン 3.0 のインテリジェンスは、すでに子犬のレベルに達していますが、GPT-3は単なるChatGPTです(ここではバージョン 1 と 2 をスキップします)。 )ベースのモデルであり、その後のバージョンのChat はこのモデルで改善され、GPT-4の最新バージョンはより正確多様になっています同時に、GPT-4 はさまざまなプラットフォームのソフトウェアに接続されています, これは、このすでに強力な頭脳に手と足を接続することと同じです. ユーザーに実用性と楽しさを追加しながら, 本来の役割を十分に発揮させることできます.人類のさまざまな分野で、人類の科学技術文明の発展をより高いレベルに押し上げます。唯一の難点は、国内ユーザーがこの技術を使用するのに一定の困難があり、ChatGPTの価格が比較的高いことです.ChaGPTの最新バージョン(バージョン5.0もリリースされると言われています)を使用したい場合は、ユーザーは月額 $20 を支払う必要があります. 最新の為替レート計算(6.8680、2023-03-2505:00の時点)国内のユーザーは少なくとも月額 137 元を使うことになり、私のような貧しい人々には受け入れられません。 ! では、バージョン 3.5 を使用しましょう。もし 4.0 を無料で販売できるのであれば... hhh

ChatGPT の開始直後に、中国で企業グループが出現し、すぐに ChatGP に関するシェル製品を開始し、すぐに国内市場を占有し、ニラを収穫し、利益を求めました。同時に、Baidu は今年 3 月に同様の製品である Wenxin Yiyan を発売しました.さらに興味深いのは、記者会見の当日、Robin Li がこの製品を紹介した後、Baidu の株価は下落し始め、ほとんどのネチズンはWenxin ChatGPT に比べれば、一言もありません。最近、メディアはTencentが発売するPanguモデルについても宣伝していますが、国情を理解しているほとんどのネチズンはこれについてあまり楽観的ではありません。私は newbing の API インターフェイスと openAI の ChatGPT4 インターフェイスのみを申請し、Microsoft のみが合格し (実際には GPT バージョン 3.0 です)、openAI はこれまでのところ私のメッセージに応答していません。文信の言葉を聞いただけで、昨日申請しましたが、他の人には注意を払っていませんでした。国内の人工知能技術はまだまだ改善が必要であり、国内の人工知能技術はまだまだ先が長いと思います

1.2 主題研究

        インターネット上にはさまざまな通信プラットフォームがあり、中国でインターネットが発展して以来、主要なインターネット企業は QQ、WeChat、Tieba、Weibo、Zhihu などのソーシャル ソフトウェアを人々が使用できるように立ち上げました。これらのアプリは、人々の間のコミュニケーションの方法を大きく変え、人々が自分の考えをより効率的かつ正確に表現できるようにしました。また、人々は多かれ少なかれ個人的な感情的傾向で、あらゆる問題について異なる見解を持っています。NLP 学者として、私たちは当然分析しなければなりません。私が使用する分析方法については、後で説明します。さまざまなソーシャル ソフトウェアの中でも、Weibo は幅広いグループをカバーしており、毎日何億人ものアクティブ ユーザーがいます。過去数年間の発展に伴い、Weibo ユーザー数の増加により、Weibo のインタラクティブなコンテンツはより多様化し、豊富で多様なコンテンツのエコロジーにより、ユーザーはより良い体験を得ることができます。Weibo では、政治、経済、娯楽、スポーツなどの分野に関係する大量の感情的なテキストが刻一刻と生成されており、一般的に感情的な傾向や個人的な立場に満ちており、非常に豊富な研究価値があります。したがって、このトピックでは Weibo を例に取り、自然言語処理技術 (NLP) を使用して、取得した Weibo コーパスのモデルを構築し、トレーニング済みのモデルを使用して、トレーニング セットに対して単語のセグメンテーションとセンチメント分析を実行します。


第 1 章 感情分析の準備

2.1 感情分析の知識ベース

        感情分析はコメントマイニングやオピニオンマイニングとも呼ばれます. 感情情報の分類に関しては, 対象とするタスクに応じて, 粗粒度の感情分類と細粒度の感情分類に大別できます.全体的なテキスト. 何かまたはオブジェクトに対する個人の全体的な評価を表す感情。粗粒度の感情分類には、賞賛、軽蔑、中立の3つに分類される感情傾向の分類と、個人の主観的な感情を喜びに分類する感情分類、怒り、悲しみ、恐怖、驚き、その他のカテゴリ。これまでのところ、テキストのセンチメント分析方法は主に、センチメント レキシコンに基づく、機械学習に基づく、およびディープ ラーニング モデルに基づく 3 つのカテゴリに分けることができます。害、これらの理論は忘れてください。ChatGPT があります。私たちはそれを求めています。その上、多くのライブラリをプロジェクトで直接呼び出すことができます (注: これは実際には単純な言語処理ジョブであり、プロジェクトと呼ぶ価値はありません。しかし、それをさせてください)!

2.2 SnowNLP ライブラリ

        このデータ マイニング実験では SnowNLP ライブラリを使用しました. このライブラリは中国人によって開発された python ライブラリです. 中国語のテキストをマイニングするために特別に設計されています. すでにアルゴリズムが組み込まれています. コーパスを構築するには, 自分で関数を呼び出す必要があります.それだけです、本当に便利です。そこには多くのアルゴリズムが含まれており、最近はアルゴリズムの原理も学ぼうとしています。しかし、このライブラリを学習するにあたり、多くの情報を調べてみると、このライブラリの具体的な詳細な説明がほとんどまたはまったくなく、多くは公式 Web サイトのこのライブラリの紹介から転載されていたため、多くの困難に遭遇しました。いくつかの説明も漠然としていました。SnowNLP について私が見つけたいくつかの事例は英語で書かれているため (SonwNLP 公式 Web サイトの紹介を含む)、英語の理解も学習プロセスの大きな難点ですが、その過程で何かを得ました. 簡単に記録します.いくつかのモジュールの呼び出し、特定の原則は...

        まずコーパスneg.csvとpos.csvを用意し、それらを使って自作モデルをトレーニングする.具体的な手順は以下の通り.SnowNLPライブラリのsnetimentモジュールを呼び出してから,自作モデルを保存し,自作フォルダに置く. 、そして後でそれを使用してください。ここには多くのトレーニング コーパスがなく、各ファイルには 10,000 以上の Weibo コーパス データしかありません. トレーニングは約 5 分で完了し、テスト マスターはこの時間を利用していくつかの英単語を覚えることができます.

        その後、独自のモデルをロードして、テスト コーパスで感情分析を実行します. その前に、独自のモデルをロードし、モデル ファイルのデフォルト パスを独自のものに変更することを忘れないでください. 次のコードの実行結果は、2 つのパスが異なることを示しています.

        モデルを読み込んだ後、データを直接処理し、感情を分析します。コードは一目でわかるので長文は要りませんが、要するにここのvalid_dataデータは各行にブログ文が入っているので、各行の後に改行(つまり改行文字)を入れる必要がありますstatement. の x.strip() メソッドを使用して分析が必要な文を取得し、それをリストに書き込み、SnowNLP.sentiments モジュールを直接呼び出して各文の分析結果を計算し、 [0,1] 値の間隔でセンチメントを作成し、リストを書き込みます。

        次に、残りの実験手順を簡単に説明します。

        そして、そう...

        そして、それはそれです...

        それでは実験終了

        ……

        ドキュメントのバックアップ:

        わかりました, もう少し深く行きたい場合は, コピーしてください. Word2vec モデルの原理を簡単にコピーしましょう (注: 複数の単語ベクトル モデルがあります)。

2.3 Word2vec メソッド

        Word2vec の単語ベクトルを使用する手順は、中国語の単語のセグメンテーション、ストップ ワードの削除、および単語ベクトルのトレーニングに分けることができます。実験コーパスは中国のWeiboネットワークプラットフォームからのものであるため、テキスト言語は主に中国語であり、非常に少数の文章にいくつかの英語の単語が混在しています. 自然な単語の分割境界として英語の単語間にスペースがあるため、単語の分割操作は必要ありませんが、中国語の単語は、単語の分割アルゴリズムを使用して、文内の単語と記号を順番に分離する必要があります。

        この実験では、Python ベースのオープン ソースの単語セグメンテーション ツール「jieba」を使用して、マイクロブログのコメント テキストをセグメンテーションします。このツールには、完全モード、精密モード、検索エンジン モードの 3 つの単語分割モードがあり、タスクの目的に応じて選択できます。コンピュータはコーパス ファイルを読み取った後、jieba.cut() メソッドを呼び出して、各文の単語の分割を開始します。その中で、jieba.cut() 関数で 3 つのパラメーターを設定する必要があります: 最初のパラメーターは引用符内で単語を分割する必要がある文字列を入力することです; 2 番目のパラメーター cut_all は True または False で埋める必要がありますフル モードまたは正確なモードを使用するかどうかを決定する; 3 番目は、HMM モデルを使用するかどうかを制御するために使用される HMM パラメーターです。実験では、正確なモードを選択して、単語のセグメンテーションの精度を確保しました。単語セグメンテーション処理の次の段階は、ストップ ワードをフィルター処理することです。オンライン コメントのテキストは非常に独創的でランダムであるため、「で」、「はい」、「は」など、実用的な意味を持たない単語が多く含まれます。また、文章中には「,」「*」「:」「#」「?」「@」「[」「]など、感情分類には役に立たない句読点が多い。 「待って。冗長な情報が多すぎると、感情分析タスクが困難になり、分析の精度に影響を与えるため、さらなる分析と処理の前に削除する必要があります。次に、キーワードを抽出します。

        ここで model.Word2Vec のパラメーターについて話しましょう。

        文: 分析したいコーパスはリストでも、ファイルから読み取ることもできます。

        size: 単語ベクトルの次元。デフォルト値は 100 です。このディメンションの値は、通常、コーパスのサイズに関連しています. 100M 未満のテキスト コーパスなどの小さなコーパスの場合は、通常、デフォルト値で十分です. 非常に大きなコーパスの場合は、次元を増やすことをお勧めします。

        ウィンドウ: 単語ベクトル コンテキスト間の最大距離です. このパラメータはアルゴリズム原則で cc としてマークされています. ウィンドウが大きいほど, 特定の単語から遠く離れた単語とのより文脈的な関係が生成されます. デフォルト値は 5 です。実際の使用では、このウィンドウのサイズは実際のニーズに応じて動的に調整できます。コーパスが小さい場合は、この値を小さく設定できます。一般的なコーパスの場合、この値は [5,10] の間で推奨されます。

        sg: つまり、word2vec の 2 つのモデルの選択です。0 の場合は CBOW モデル、1 の場合は Skip-Gram モデルで、デフォルトは 0 で CBOW モデルです。

        hs: つまり、word2vec の 2 つのソリューションの選択. 0 の場合は、負のサンプリングです. 1 で、負の負のサンプルの数が 0 より大きい場合は、Hierarchical Softmax です. デフォルトは 0 で、これは NegativeSampling です。

        負: 負のサンプリングを使用する場合の負のサンプルの数。デフォルトは 5 です。[3,10] の間であることが推奨されます。このパラメーターは、アルゴリズムの原則では負としてマークされています。

        cbow_mean: CBOW が射影を行っている場合にのみ使用されます. 0 の場合はコンテキストの単語ベクトルの合計であり、1 の場合はコンテキストの単語ベクトルの平均値です. 単語ベクトルの平均値に従って記述します。

        min_count: 単語ベクトルの最小単語頻度を計算する必要があります。この値は、いくつかの非常にまれな低頻度の単語を削除できます。デフォルトは 5 です。コーパスが小さい場合は、この値を下げることができます。

        iter: 確率的勾配降下法の最大反復回数。デフォルトは 5 です。大規模なコーパスの場合、この値を増やすことができます。

        alpha: 確率的勾配降下法における反復の初期ステップ サイズ。デフォルトは 0.025 です。

        min_alpha: アルゴリズムは反復プロセス中にステップ サイズを徐々に減らすことをサポートしているため、min_alpha は反復ステップ サイズの最小値を示します。確率的勾配降下の各ラウンドの反復ステップ サイズは、iter、alpha、および min_alpha によって取得できます。

        大きなコーパスの場合、適切な 3 つの値を選択するために、alpha、min_alpha、および iter のパラメーターを一緒に調整する必要があります。

2.3 単語ベクトルの動作原理

        基本的な考え方は、トレーニングを通じて、特定の言語の各単語を固定長の短いベクトルにマップし (ここでの「短い」は、ワンホット表現の「長い」に関連しています)、これらすべてのベクトルをまとめては単語ベクトル空間を形成し、各ベクトルは空間内の点と見なすことができます.この空間に「距離」を導入することにより、単語間の距離を(語彙的、意味的に)類似性で判断できます. 例: 各単語ベクトルが 2 次元平面上に分布する N 個の異なる点であると仮定します. 特定の点が与えられた場合, 平面上のこの点に最も近い点を見つけたいとします. この問題を解決するには, 次の手順に従います:最初に、直交座標系を確立し、この座標系に基づいて、その各点が一意の座標に対応します; 次に、ユークリッド距離を導入します; 最後に、この単語と他の N-1 個の単語の間の距離を計算します それらの間の距離、単語距離の最小値に対応するのが、探している単語です。

        もちろん、ここで GPT に直接渡すこともできます(ここではバージョン 3.5 を使用しています。4.0 は使用できません。マジシャンの皆さん、ご容赦ください)。より専門的であり、その知識フレームワークが非常に使いやすく、多くの場所で非常に便利であることは否定できません。4.0版のAPIまでいけたらもっと完璧です

        コードは次のようになります: 途中にストップワード処理コードがありますが書かれていません. 


第三章はよく考えなかった…

第4章 思いもよらなかった…

第5章 考えもしなかった…


最後に書く:

        結果に満足できない場合は、さらにモデルを試すか、データとモデルを改良することができます。アプローチは次のとおりです。モデルをロードし、Weibo コーパス (.txt) を読み取り、Word2vec を LSTM、Bi-LSTM、Self-Attention、および CNN ネットワーク モデルに接続してトレーニングし、各モデルの精度と F1 スコアを計算します。 、そしてExcelの表に書いてください...

        また、表紙はGPT3.5で生成されており、かなり抽象的に見えますが、十分に説得力があります。一つ言えることは、ChatGPTは本当に使いやすいということです. 希望があれば、マジシャン同士で交流したり、一緒に学んだりできます.


チャットが出てきたらすぐに、コーダーは死んでいます。コードはここにあります。それを取り除いてください!

Word2vec の方法:

from snownlp import sentiment
import gensim
from gensim.models import Word2Vec
import jieba
import os

sentiment.train("train_neg_data.txt",
                "train_pos_data.txt")
sentiment.save('./saved_model/weibo.marshal')

# 读取积极语料
pos_file = "train_pos_data.txt"
with open(pos_file, 'r', encoding='utf-8') as f:
    pos_text = f.read()

# 读取消极语料
neg_file = "train_neg_data.txt"
with open(neg_file, 'r', encoding='utf-8') as f:
    neg_text = f.read()

# 对积极语料和消极语料进行分词
pos_words = jieba.lcut(pos_text)
neg_words = jieba.lcut(neg_text)

#停用词处理

# 建立Word2Vec模型
sentences = [pos_words, neg_words]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)

# 保存模型
model_file = '../saved_model/sentiment_analysis.model'
model.save(model_file)

# 加载模型
model = Word2Vec.load(model_file)

# 查看词向量
# print(model.wv['好'])

SnowNLP を直接呼び出す

import pandas as pd
import snownlp
from snownlp import sentiment
from snownlp import SnowNLP

#数据格式转换
neg = pd.read_excel("neg.xls")
pos = pd.read_excel("pos.xls")

neg.to_csv("neg.csv")
pos.to_csv("pos.csv")

#训练语料,构建模型
sentiment.train("neg.csv",
                "pos.csv")
sentiment.save('../saved_model/weibo_pro.marshal_2.0')#这里差不多要五分钟


# Use the saved model to analyze the sentiment of test data
# sentiment = sentiment.classifier.load('../saved_model/weibo_pro.marshal_2.0')
# print("默认的模型文件路径:", sentiment.data_path)
sentiment.data_path ="../saved_model/weibo_pro.marshal_2.0.3"#加载文件路径
# print("自己训练的模型路径:", sentiment.data_path)

#对测试数据进行情感分析
data  = []
data_file = "valid_data.txt"
with open(data_file, "r", encoding="utf-8") as f:
    data_line = f.readlines()
    f.close()
for line in data_line:
    data_sentence = line.strip("\n")
    data.append(data_sentence)
data_text = pd.DataFrame(data, columns=["sentence"])

data_text_file = "valid_data.xls"
test_data = pd.read_excel(data_text_file)

#把分析结果写入excel文件
test_data["sentiment"] = test_data["sentence"].apply(lambda x: SnowNLP(x).sentiments)
test_data["sentiment"].to_excel("../results/marshal_2.0_test_result.xls")#写入文件
import snownlp
from snownlp import SnowNLP
import pandas as pd

#加载训练好的模型
# model_path = "./saved_model/weibo.marshal.3"
# s = SnowNLP(model_path)
snownlp.sentiment.DATA_PATH ="./saved_model/weibo_pro.marshal_2.0.3"

# df = pd.DataFrame(columns=['text', 'sentiment'])

text = []
sent = []
with open("valid_data.txt", 'r', encoding='utf-8') as f:
    data = f.readlines()
for line in data:
    sentence = line.strip("\n")
    sentiment = SnowNLP(sentence).sentiments
    text.append(sentence)
    sent.append(sentiment)
        # df = pd.concat({'text': line, 'sentiment': sentiment}, ignore_index=True)
        # df = pd.concat({'text': line, 'sentiment': sentiment}, ignore_index=True)
df_text = pd.DataFrame(text, columns=['text'])
df_sent = pd.DataFrame(sent, columns=['sentiment'])

pf = pd.concat([df_text, df_sent], ignore_index=True)
pf.to_excel('./results/SnowNLP_result.xlsx', index=False)

参考文献:

[1]  Lang Cong. (2021).深層学習に基づくマイクロブログ テキストのセンチメント分析(修士論文、瀋陽工科大学深層学習に基づくマイクロブログ テキストのセンチメント分析 - CNKI

[2] LSTM に基づくテキスト感情分類の深層学習モデルの構築: 正解率は 95% を超えることが多い_感情分類精度_YiqiangXu のブログ - CSDN ブログ

[3] https://www.cnblogs.com/always-fight/p/10310418.html

[4] https://louyu.cc/articles/machine-learning/2019/09/?p=1933/

[5]ショッピングレビューテキストのセンチメント分析演算をPythonで実現 [中国語のテキストマイニングライブラリsnownlpに基づく] / Zhang Shengrong 

おすすめ

転載: blog.csdn.net/weixin_51206451/article/details/129917512