見出し画像

Aidemy 自然言語処理講座 成果物【wordcloudで見る『きのこ たけのこ』】〜対話型AIを活用したプログラミング学習 ~

[自己紹介・受講に至った理由]

 私は大学卒業後、離島の精神科病院で福祉の相談員として10年間働いていました。4月に地元へ戻り、今こうしてプログラミング学習をしています。
 プログラミングに興味を持ったきっかけは、Windows95に触れてインターネットの世界を知ったことです。大学では、自分のパソコンで好きなことを好きなだけできるようになりました。そのうちに「この英語や記号はなんだろう?」との疑問、「ネットゲームのツールを自作して配布できるなんてすごい」との憧れを持ち、自然とプログラミングの本を手にしていました。しかし、独学では本の内容を理解できず、「大学の勉強を優先しないと…」や「仕事で忙しい」と理由をつけては挑戦と挫折を繰り返して来ました。
 社会人生活が長くなるにつれて、『問題解決能力や変化を捉える力をもっと磨きたい』との思いが次第に強りました。年齢や将来のことなど悩んだ末に、「プログラミングと本気で向き合う最後のチャンスにしよう」と決心しました。
 学習環境は地方のため完全オンラインしか選択肢はなく、習得言語への強いこだわりはなかったことから対話型AIの流行に乗っかる形でpythonを選択しました。そして、給付金の利用ができるオンラインスクールを探しました。それが「Aidemy 自然言語処理講座」を受講へと至った理由です。

[目次]

  1. 本記事の概要

  2. 作業環境

  3. 対話型AIとの学習

  4. 成果物作成を通して

  5. まとめ

1.本記事の概要

 本記事は、カリキュラムの締め括りとなる「学習の成果の実践」を披露する場として制作しました。本来であれば、成果物のコードや結果を載せて、最低限のコメントをつけるだけのシンプルな内容が適切かと考えます。
 しかし、現在の私には手の込んだ成果物は作れないため、代わりに対話型AIとのやり取りを公開し、個人的なメリットデメリットを示すことで記事の付加価値を高めます。

2.作業環境

・PC:chromebook(講座)、M1macbook(カウンセリング、成果物・ブログ) 
・OS:mac
・対話型AI:AIチャットくん(pc版LINEよりログイン)
・実行環境:Google Colaboratory
・Pythonのバージョン:Python 3.10.11
・csvファイル:下記よりダウンロード可能です

【きのこの山】500ツイート
【たけのこの里】500ツイート


3.対話型AIとの学習

 受講開始に合わせて有料版を利用しました。PC版のchromeの拡張機能でLINEにログインし、『AIチャットくん』を利用できる環境を作りました。

○メリット

解説役

気軽に聞ける

例えの提示

瞬時に例えを作ってくれる
作り直しもできる

理解度の確認

AIに質問することで頭の整理にも繋がる
下手な例え話でも理解して答えられる

エラーの修正

エラー箇所を日本語で適切に解説してくれる

分からないことはあれば気軽に相談でき、数秒〜30秒で返信が来るため集中力ややる気が途切れずに学習を進めることができました。


○デメリット

コードを作りたがる

コード見ると生成禁止のルールを平気で破る

修正の提案が不適切

学習が進むに連れて予想外の提案が増えた

しれっと間違える

計算は苦手?

受講当初は『AIブースト』と思える程に大活躍しましたが、カリキュラムが中盤に差し掛かるとAI頼りにはいかなくなりました。用語やエラーの解説役としてまだよくても、「こちらが修正コードです」と提示された物のエラー率が次第に高くなっていきました。


○AIへの質問

AIに学習の相談をする
AIにプログラミングの有用性を問う①
AIにプログラミングの有用性を問う②
やっぱり気になるプログラミング挫折率


4.成果物作成を通して

 「初めての成果物は小さくてもいいから完成を優先、動くことが大事!」という目標を立て、スモールステップでコーティング等を行いました。
 自然言語処理講座ということで『形態素解析』を使い、その結果をわかりやすく表現できる『wordcloud(ワードクラウド)』を成果物と決めました。
 形態素解析の対象としては、リアルタイムな情報を得られる『Twitter』を選びました。検索ワードは、結果の対比ができるように2つ用意することにしました。よくつぶやかれているワードながらできる限りノイズ(宣伝ツイート等)の少ない物を探すのには苦労しましたが、最終的に『きのこの山』と『たけのこの里』としました。


# TwitterAPIの取得
import tweepy
import pandas as pd
BT = "*******************************************"
CK = "*******************************************"
CS = "*******************************************"
AT = "*******************************************"
ATS = "*******************************************"

# client = tweepy.Client(bearer_token=BT, consumer_key = CK, consumer_secret=CS, access_token=AT, access_token_secret=ATS)
client = tweepy.Client(bearer_token=BT)
# ツイートの取得
# 検索単語を変更する
search_word = "きのこ 山 -RT" #ここを変更
file_name = "きのこ山500" # ここを変更
# 最大何件ツイートを取得するか(最大100まで指定可能)
max_results = 100
# 100×10で1000ツイート取得する
search_counts = 5 # 取得可能ツイートが1000未満のため、今回は500

tweets_list = []
next_token=""

for search_count in range(search_counts):
  if search_count == 0:
    tweets = client.search_recent_tweets(query=search_word, max_results=max_results)
  else:
    tweets = client.search_recent_tweets(query=search_word, next_token=next_token, max_results=max_results)
  tweets_list += [tweet.text for tweet in tweets[0]]
  next_token = tweets[-1]['next_token']

df_tweets = pd.DataFrame(tweets_list)
df_tweets.to_csv(f"{file_name}.csv") #csvで一時的に保存

 TwitterAPIも仕様変更が多く、数ヶ月前の情報も当てにならない状況でした。次の仕様変更も間近に迫る中でAPIの取得や設定に大変苦労しました。自力でのツイート収集は不可能だったと思います。
 せっかく抽出できたcsvファイルも、途中まで保存(PCへのダウンロード)の必要性を知らなかったため何度もデータが消えてしまいました。

# 形態素解析のためjanomeをインストール
!pip install janome
from janome.tokenizer import Tokenizer
!pip install wordcloud #wordcloudをインストール
df = pd.read_csv("/content/【きのこの山】500ツイート.csv") # アップロード済みのcsvを読み込む

tweets = list(df.iloc[:,1])
tweets =" ".join(tweets)
#ノイズの除去
reg_tweets = re.sub("[0-9a-zA-Z。、たけのこきのこ里山シェアさん明治新規袋お菓子書いごと円買うカウぷりチョコ西田私]+", "", tweets)

 reg_tweets = re.sub で解析のノイズとなる言葉を片っ端から外していています。今回は『きのこ』と『たけのこ』比較のため、雑な処理のままの実装しました。

t = Tokenizer()
tokens = t.tokenize(reg_tweets) 
# 以下のリストに答えを代入
word = []

# 以下に回答を作成
for token in tokens:
    part_of_speech = token.part_of_speech.split(",")[0]
    if part_of_speech == "名詞" :
      word.append(token.surface)

word = " ".join(word) #改行をなくす

 『自然言語処理基礎コース/正規表現』を参考にコーディングしました。

#ワードクラウドのインストール
from wordcloud import WordCloud

#フォントをインストール
!apt-get install -yq fonts-noto-cjk 
wordcloud = WordCloud(background_color="white",font_path="/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",width=800,height=600).generate(word)
wordcloud.to_file("./sample.png")

 wordcloudに関して様々な情報が見つかり安心していましたが、2つの問題が起こりました。
 ①解析でjanomeを使ったが、Mekabの情報の方が多い
 ②Macに元々入っているフォントでは、wordcloud生成時にエラーになる

 特に②の問題が深刻で、解決策はあっても何をしているのかがよく分かりませんでした。サイトで見つけたフォントデータを何度もテストした結果、1つだけエラーせずに実行することができました。
 参照元のリンクを貼ろうしましたが、探したサイトが多すぎたせいか履歴を遡っても二度と見つかりませんでした。次に同じような経験をした際にはブックマークを忘れずにします。

import matplotlib.pyplot as plt #図形表示のためインストール

plt.imshow(wordcloud) 
plt.axis("off")  #軸の表示をオフ
plt.show() #ワードクラウドを表示
きのこの山【wordcloud】
たけのこの里【wordcloud】
【左:たけのこ】ワードクラウド比較【右:きのこ】

 結果を見ると、まず大きな「派」が目に入ります。そして「論争」や「勢力」など『きのこたけのこ論争』を思わせるワードも見受けれます。しかし、それらは除けばどちらにも好意的な言葉が多いことが分かります。
 また、人気がないと言われる『きのこの山』にネガティブなワードがないことから両者ともTwitter上の消費者からは同じように愛されているお菓子であることが分かりました。

5.まとめ

 『理論よりもまずは実践』ということで、小さいながら成果物を形にすることができました。これまでの学習の成果やAIの助けもありましたが、何よりチューターの方のサポート無くしては完成することは絶対にありませんでした。この場をお借りして感謝申し上げます。
 今回は、扉を開いて外に一歩踏み出すようなスモールステップでしたが、その一歩一歩を大切に重ねてプログラミング学習に励んでいきます。

この記事が参加している募集