編集履歴一覧に戻る
taketea2018のアイコン画像

taketea2018 が 2026年02月22日11時01分06秒 に編集

コメント無し

本文の変更

# ** データサイエンス入門 **  AIプログラミングで学ぶデータサイエンス ## 第2回 Python によるマルコフ連鎖で文章生成に挑戦! ![キャプションを入力できます](https://camo.elchika.com/f608f558e614dcbea7cb0a58482141b65a566698/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35366430316335352d643164612d343337312d613931662d6436376466353963373766642f61653264396130652d623735392d346433322d393135652d646462313238633261626563/)

-

 Pythonを用た日本語の自動文章生成の仕組みと実践方法を解説ます

+

第1回で準備設定したGoogleColaboratory(以後、GoogleColab)環境はうまく使えてるでょうか

-

 まず、MeCabライブラリ活用し文章最小単位に分解形態素解析の重要性につて説明します。

+

 文章生成型AIと呼ばれるChatGPTがテレビやネット新聞紙上にぎわせています。自然な文章で質問を入力でき自然な文章で答え生成してくれるAIの代表格がChatGPTで。指示文章から画像を生成してくれAIも増えてるようです。 

-

 次に、分解された単語のつながり確率的選択するマルコフ連鎖といアルゴリズムを、新し文章組み立て手順を紹介しています。Google Colaboratoryでの具体的なプログラミング手法が示されおり、辞書の成から読みすい形式へ加工でを網羅しています。

+

 生成型AI仕事や学業利用するのは是か非か、利点や問題点はどのよな部分か、今後の利方針はどうすればいかなど、様々な議論が始まっます。AI利用す方法に話題は集中しています。しかし、プログラムにより動いいるAIをるにはどんな知識技術が必要なかはあり知られていないに感じます。その動作原理がわかれば、より理解を深めることができます。

-

 最終的、生成AIの基盤とな技術をすること、国産AIの活性化技術への深い洞察内容なって

+

 世界中あふれてい文章を解析する技術を「テキストマイニング」といいます。文章をするには単語単位に分解することが必要す。単語助詞など文章構成る最小単位を形態素い、分解解析することが「形態素解析」です。その一つが「分かち書き」です。「私は昨日旅行に行きした。」は形態素解析ると「私/は/昨日/旅行/に/行きました/」と分かち書きされます。

-

登場するオリジルキャラクター「あいぴ」です。

+

 英文を代表とする多く言語において単語空白で区切られた状態で文章中に存在しており改めて分かち書きする必要はありません。その点日本語は漢字とひらがな、カタカが混在した世界でも類を見ない複雑な言語ひとつです。そのために分かち書きなど文章を解析する技術が発達しました。

-

### 〇動画は下記URLよりご視聴ください。

+

 生成型AIプログラミングを試すには、日本語文章を形態素解析により分かち書きするなどAIが処理しやすい形にする必要があります。そこで、生成型AIプログラミングの前段階として、マルコフ連鎖を利用したPythonプログラムによる文章生成に挑戦しましょう。  Pythonは文字を扱うための豊富なライブラリが揃っているので、文章生成プログラムを試すにはもってこいです。形態素解析ライブラリとしてmecab(和布蕪)を利用します。mecabは分かち書きだけでなく、品詞分類もできる多機能な形態素解析ライブラリです。 登場するのはオリジナルキャラクターの「あいぴ」です。 ###〇動画は下記URLよりご視聴ください。

https://youtu.be/mfFhUTdv3w0

-

###PDF解説です。

+

##解説用スライド形式pdfです。

https://drive.google.com/file/d/1VgRc7LRKMiHx6hvW_6Kj9U9TuZOtXG9b/view?usp=drive_link

-

### 〇マルコフ連鎖用元文書です。

+

## 〇マルコフ連鎖用元文書です。

https://drive.google.com/file/d/1DGFBC4hjzeWFjgFA2R7k0SE73rXp1B9f/view?usp=drive_link

-

### 〇サンプルプログラム

+

## 〇サンプルプログラム

GoogleColaboratoryにアップロードすればすぐに動作を確認できます。実行結果のサンプル付きです。

+

``` !pip install mecab-python3 !pip install unidic !python -m unidic download !apt-get -q -y install mecab libmecab-dev file !git clone --depth 1 https://github.com/neologd/mecab-unidic-neologd.git !echo yes | mecab-unidic-neologd/bin/install-mecab-unidic-neologd -n ``` ``` #!/usr/bin/env python # -*- coding: utf-8 -*- import random import MeCab #import codecs from google.colab import drive drive.mount('/content/drive') #filename = "/content/drive/MyDrive/data_science/tonari_missile.txt" filename = "/content/drive/MyDrive/data_science/tonari_takato.txt" #filename = "/content/drive/MyDrive/data_science/hajimeni.txt" source_text=open(filename,"r",encoding="utf-8").read() #print("元文書:",source_text) temp1 = MeCab.Tagger("-Owakati") temp1 = temp1.parse(source_text) wakachi = temp1.rstrip(" \n").split(" ") print("分かち書き結果:",wakachi) # マルコフ連鎖用辞書の作成 mjisho={} #jishoという名前で空辞書準備 kotoba_mae="" #連鎖用前の言葉 kotoba_ato="" #連鎖用後の言葉 for tango in wakachi: #wakachiからkotobaに単語を取り出す if (kotoba_mae,kotoba_ato) not in mjisho: mjisho[(kotoba_mae,kotoba_ato)]=[] mjisho[(kotoba_mae,kotoba_ato)].append(tango) kotoba_mae=kotoba_ato kotoba_ato=tango print("辞書:",mjisho) #文書生成 count = 0 bunsho="" mkey=list(mjisho.keys()) print("辞書のキー:",mkey) kotoba1,kotoba2=random.choice(mkey) print("分かち書きした単語の数:",len(wakachi)) while count < 200: tango = random.choice(mjisho[(kotoba1, kotoba2)]) print(kotoba1,kotoba2,tango) bunsho += tango kotoba1=kotoba2 kotoba2=tango count += 1 print("元文章:",filename) print('\n***** あいぴが執筆しました *****\n') count=1 for kotoba in bunsho: if kotoba=='「': print('\n') print (kotoba,end='') elif kotoba=='」': print(kotoba) print('\n',end='') count=1 elif kotoba=='\n': kotoba=' ' else: print(kotoba,end='') if count % 40== 0: print('\n',end='') count=1 count +=1 ```

https://drive.google.com/file/d/1R2sB8azQTfWE0nzfgv4fjZqcOZh68DCj/view?usp=drive_link

-

### 〇補足

+

## 〇補足

公開している動画とPDFは電波新聞社刊行電子工作マガジンに連載された同題名の内容をGoogle NotebookLMにてまとめています