このシリーズではChatGPTを中心とした最新の大規模言語モデル(LLM)に関する情報をまとめています。最新AI技術を使用した「ChatGPT」をはじめとした、自然言語処理技術の概要や活用方法について紹介しておりますので、ぜひ最後までご覧ください。

※大規模言語モデルは技術の進歩がとても速い分野となりますので、最新の情報もこちらからご確認ください。

今回の記事では日本語LLMの1つであるJapanese-Starling-ChatV-7Bの実装を紹介します。
Google Colabを使用して簡単に実装できますので、ぜひ最後までご覧ください。

概要

詳細は以下のリンクからご確認ください。

実装

ここからはGoogle colabを使用して実装していきます。
(Google colabの使用方法はこちら⇨使い方

必要なライブラリをインストールします。

!pip install llama-cpp-python

モデルを準備します。

from llama_cpp import Llama

llm = Llama.from_pretrained(
    repo_id="TFMC/Japanese-Starling-ChatV-7B-GGUF",
    filename="japanese-starling-chatv-7b.f16.gguf",
    n_ctx=4096,
)

prompt_template = """[INST]
<<SYS>>
あなたは役に立つアシスタントです。
<</SYS>>

{prompt}
[/INST]"""

質問応答

prompt = "日本一高い山について解説してください。"
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

日本一高い山は富士山(Fuji-san)と呼ばれる山で、標高が3,776メートルあります。
この数字は現在も変わっておらず、日本の地理学的な特徴として知られています。
富士山は、静岡県と山梨県にまたがる活火山であり、日本で最も有名かつ美しい山の一つとされています。
毎年多くの観光客や登山者が訪れ、世界遺産にも登録されるなど国際的にも注目を集めています。
富士山は成層火山であり、その形状から独立峰としても知られています。
日本人にとって特別な存在であることから、様々な文化的・芸術的表現がされており、歌や絵画、小説など多くの作品に登場します。
また、富士山は古代から信仰の対象としても重要であり、江戸時代以前から修験者や僧侶が修行を行ってきました。
現在でも、山頂には富士山本宮浅間大社の奥宮があり、多くの参拝客が訪れています。
なお、日本一高い山と言われることから、富士山は「霊峰」とも呼ばれており、その神秘的な美しさや威厳ある姿によって多くの人々を魅了し続けています。

要約

prompt = """

以下の文章を箇条書きで要約してください。

富士山(ふじさん)は、静岡県(富士宮市、富士市、裾野市、御殿場市、駿東郡小山町)と山梨県(富士吉田市、南都留郡鳴沢村)に跨る活火山である。
標高3776.12 m、日本最高峰(剣ヶ峰)の独立峰で、その優美な風貌は日本国外でも日本の象徴として広く知られている。
数多くの芸術作品の題材とされ芸術面のみならず、気候や地層など地質学的にも社会に大きな影響を与えている。
懸垂曲線の山容を有した玄武岩質成層火山で構成され、その山体は駿河湾の海岸まで及ぶ。
古来より霊峰とされ、特に山頂部は浅間大神が鎮座するとされたため、神聖視された。
噴火を沈静化するため律令国家により浅間神社が祭祀され、浅間信仰が確立された。
また、富士山修験道の開祖とされる富士上人により修験道の霊場としても認識されるようになり、登拝が行われるようになった。
これら富士信仰は時代により多様化し、村山修験や富士講といった一派を形成するに至る。
現在、富士山麓周辺には観光名所が多くある他、夏季シーズンには富士登山が盛んである。
日本三名山(三霊山)、日本百名山[2]、日本の地質百選に選定されている。
また、1936年(昭和11年)には富士箱根伊豆国立公園に指定されている。
その後、1952年(昭和27年)に特別名勝、2011年(平成23年)に史跡、
さらに2013年(平成25年)6月22日には関連する文化財群とともに「富士山-信仰の対象と芸術の源泉」の名で世界文化遺産に登録された。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

1. 富士山は静岡県・山梨県に跨る活火山で、日本最高峰の独立峰。
2. 芸術作品や地質学的要素から社会に影響を与えている。
3. 玄武岩質成層火山で、海岸まで及ぶ大きな山体を持つ。
4. 古来より神聖視され、浅間神社が祭られている。
5. 富士信仰があり、村山修験や富士講など一派を形成する。
6. 現在は観光名所が多く、夏季に富士登山も盛ん。
7. 日本三名山(三霊山)・日本百名山・日本の地質百選に選定されている
8. 1936年に富士箱根伊豆国立公園に指定、1952年に特別名勝、2011年に史跡指定。
9. 2013年に「富士山-信仰の対象と芸術の源泉」の名で世界文化遺産に登録された。

翻訳(日本語→英語)

prompt = """

以下の文章を日本語から英語に翻訳してください。

日本で一番高い山は富士山です。富士山は山梨県と静岡県の境目にある活火山で、標高は3,776メートルです。
日本最高峰だけではなく世界的にも有名な活火山で、「日本の象徴」とも言われています。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

The highest mountain in Japan is Mount Fuji. 
Mount Fuji, located at the border between Yamanashi Prefecture and Shizuoka Prefecture, is an active volcano with a height of 3,776 meters. 
It\'s not only the highest point in Japan but also well-known worldwide as a famous active volcano, often referred to as "the symbol of Japan".

翻訳(英語→日本語)

prompt =  """

以下の文章を英語から日本語に翻訳してください。

The highest mountain in Japan is Mount Fuji. 
Mount Fuji is located at the boundary of Yamanashi and Shizuoka prefectures in Japan, 
and it has an elevation of 3776 meters above sea level. 
It is one of the active volcanos that are well known around the world as a symbol of Japan.

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

日本の最高峰は富士山であり、それはヤマナシ県と静岡県の境界に位置しています。富士山の標高は海抜3776メートルであり、世界的に有名な活火山の一つでもあります。これは日本を象徴するシンボルとして知られています。

感情分析

prompt =  """

次の文章の感情を、ポジティブ、ネガティブ、ニュートラルに分類してください。
・富士山の頂上からの眺めは息をのむほど美しかった。
・富士山登山中に怪我をして、下山するのが大変だった。
・富士山は日本の最高峰で、標高は3,776mである。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

n1. ポジティブ: 「富士山の頂上からの眺めは息をのむほど美しかった」という文章が挙げられます。ここでは、美しい景色に感動している気持ちが表現されており、ポジティブな感情と言えます。
n2. ネガティブ: 「富士山登山中に怪我をして、下山するのが大変だった」という文章が挙げられます。ここでは、怪我や大変な状態を経験したことからネガティブな感情が表現されており、読み手に共感や同情を誘う内容となっています。
n3. ニュートラル:「富士山は日本の最高峰で、標高は3,776mである」という文章が挙げられます。ここでは、事実を客観的に述べているだけなので、特定の感情を表現していないためニュートラルに分類されます。

固有表現抽出

prompt = """

次の文章中から、地名、人名、組織名を抽出してください。
文章:鈴木次郎は、静岡県にある富士山の麓で開催された、環境省主催の自然保護イベントに参加した。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

地名:静岡県、富士山の麓
人名:鈴木次郎
組織名:環境省(主催者)

論理推論

prompt = """

次の文章が論理的に正しいかどうかを判定し、正しくない場合は理由を説明してください。
文章:富士山は日本で最も標高が高い山です。エベレストは世界で最も高い山です。したがって、富士山はエベレストよりも高いはずです。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

この文章は論理的に正しくありません。以下に理由を説明します。
理由1: 比較対象が異なる
富士山とエベレストは、それぞれ日本と世界の最高峰であり、比較すること自体に問題はありません。しかし、両者を直接的に比較することが正当化されない場合があります。富士山の標高(3,776m)とエベレストの標高(8,848m)を比べて、「したがって、富士山はエベレストよりも高いはずです」と主張することには慎重になる必要があります。

理由2: 比較の前提条件が正しくない可能性がある
富士山は日本最高峰であることを認めつつも、エベレストは世界最高峰であり、比較する際には注意が必要です。例えば、地球上の海抜ゼロ地点からの距離や、環境条件なども考慮して比較するべきです。

結論として、富士山がエベレストより高いはずだと主張するこの文章は、正確性を欠く可能性があります。より適切な比較を行うべきであり、両者を単純に比べることは避けるべきでしょう。

計算・数学問題

prompt = """

富士山の標高は3,776mです。
山頂までの距離が30kmだとします。
平均斜度(パーセント)を求めてください。

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

富士山の標高差を考える際に、山頂から基点(例えば、五合目など)までの距離が重要になります。
今回は、山頂までの距離が30kmという情報しかありませんので、平均斜度を求めることはできません。

もし、富士山五合目など基点から山頂までの距離を知っている場合には、以下の計算式で平均勾配(パーセント)を求めることができます。
平均斜度(パーセント) = 標高差 / 基点から山頂までの距離 × 100\n\n例えば、富士山五合目から山頂までの距離が2.5kmだとした場合には、以下のような計算式となります。
平均斜度(パーセント) = (3,776m - 2,500m) / 2.5km × 100\n平均斜度(パーセント) ≈ 40.9%

この計算式では、山頂から基点までの標高差を用いて、平均斜度を求めることができます。
ただし、今回提供されている情報では、距離が30kmしかなく、山頂に至る基点が不明確なため、正確な平均斜度を求めることはできません。

プログラミング・コーディング

prompt = """
富士山の標高をメートルで入力すると、フィートに変換して出力するPythonプログラムを作成してください

"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

はい、以下は富士山の標高をメートルからフィートに変換するPythonプログラムです。

```python
# 富士山の標高(メートル)\nheight_meters = 3776

# 1メートルをフィートに変換する係数(1メートル=約3.2808フィート)
feet_conversion_factor = 3.2808

# 富士山の標高をフィートに変換
height_feet = height_meters * feet_conversion_factor

# 結果を出力\nprint(f"富士山の標高(メートル): {height_meters}m")
print(f"富士山の標高(フィート): {height_feet}ft")
```

上記のプログラムでは、まず富士山の標高をメートル単位で定義しています。
次に、1メートルあたりのフィートへの変換係数(約3.2808)を設定します。
そして、`height_meters`と`feet_conversion_factor`をかけ合わせることで、富士山の標高をフィートに変換します。
最後に、結果を出力しています。

これを実行することで、「富士山の標高(メートル): 3776m」および「富士山の標高(フィート): 12411.98ft」という出力が得られます。

文章校正

prompt = """

次の富士山に関する文章の誤りを指摘し、修正してください。 
文章:富士山は静岡県にある活火山で、最後に噴火したのは1707年です。富士山は楽に登れる山なので、初心者でも簡単に登頂できます。
"""
output = llm(prompt_template.format(prompt=prompt), max_tokens=-1)
print(output)

実行結果:

誤りを指摘し、修正した文章:

文章:富士山は静岡県と山梨県にまたがる活火山であり、最後に噴火したのは1986年(昭和51年)です。
富士山は世界遺産に登録されており、多くの観光客や登山者が訪れる人気のある山となっていますが、初心者が簡単に登頂できるほど容易な山ではありません。

修正点:
1. 富士山が静岡県と山梨県にまたがっていることを追記しました。
2. 最後の噴火年を1986年(昭和51年)に修正しました。
3. 初心者でも簡単に登頂できるという表現を修正し、富士山は世界遺産に登録されており、多くの観光客や登山者が訪れる人気のある山だが、初心者が容易に登頂できるほど容易な山ではないことを明確化しました。

まとめ

最後までご覧いただきありがとうございました。