fc2ブログ

ダイダイの収穫

 今年も残りわずかになりました。昨日(12/29)仕事納めで、今日から1/3までの5日間の休暇に入りました。この年末年始は世間的にはコロナの行動規制は緩和されていますが、今回は自粛して実家の九州には帰らないことにしました。自分の周りでも多くの人が感染しており、ニュースで報道されている数よりもはるかに多い感染者いるのは明らかですからね。

 さて、庭に植えているダイダイが今年8つの実を付けました。今年9月の台風の時は実が落ちないことを祈りましたが、その甲斐もあり、被害はなく、その名の通りきれいな橙色の大きな実に成長しました。daidai_221230_1.png 収穫をしたダイダイはこんな感じです。daidai_221230_2.png 乾燥した日が続いて、喉が痛くなることもあるので、果汁を絞ってハチミツ入りのお湯割りでも飲もうと思います。美味しいですよね。
スポンサーサイト



Line Notifyを使う(1)

 Lineに外部のサービスからメッセージを送れる「Line Notify」を使ってみました。最近、天気(気圧)が急激に変化して頭が痛くなることが多いので、Lineにアラートを送れそうだなという思いつきです。メールでもいいんですけどね(gmailで似たようなことは経験済みですが・・)。

 まず、LineNotifyのサイトからLineNotify_221211_1.pngログインしてLineNotify_221211_2.pngマイページからLineNotify_221211_3.pngトークンを発行します。LineNotify_221211_4.pngLineメッセージに表示させる名称(今回は「気象情報」)を設定して「発行する」ボタンを押すと、LineNotify_221211_5.pngトークンが発行されるので、コピーして自分のローカルPC内に保存しました。LineNotify_221211_6.png設定後、連携中のサービスとして表示されました。LineNotify_221211_7.png
 次に、スマホのLineの「設定-アカウント」を開き、ログイン・セキュリティで「ログイン許可」がONになっていることを確認しておきます。LineNotify_221211_8.pngLineを確認すると、Line Notifyが利用可能との連絡が来ていました。LineNotify_221211_9.png
 スマホのLineアプリの受け部分の準備がOKなので、次にLineに送る「気象情報」の準備をしました。今回は、取り急ぎ、Raspberry Pi Zeroに接続したBME280の温度、気圧、湿度にしました。ネット上から必要な情報を仕入れて、コードはいつもながらのgithubのサンプルを利用し、Line Notifyの部分を追加しました。22〜30行目にあるようにWebAPIで命令するコードです。
import smbus
import time
import requests
import datetime

dt_now = datetime.datetime.now()

bus_number = 1
i2c_address = 0x76

bus = smbus.SMBus(bus_number)

digT = []
digP = []
digH = []

t_fine = 0.0
strT = ""
strP = ""
strH = ""

def send_message(text):
headers = {
'Authorization': 'Bearer my_token',
}

files = {
'message': (None, text),
}
requests.post('https://notify-api.line.me/api/notify', headers=headers, files=files)

def writeReg(reg_address, data):
bus.write_byte_data(i2c_address,reg_address,data)

def get_calib_param():
calib = []

for i in range (0x88,0x88+24):
calib.append(bus.read_byte_data(i2c_address,i))
calib.append(bus.read_byte_data(i2c_address,0xA1))
for i in range (0xE1,0xE1+7):
calib.append(bus.read_byte_data(i2c_address,i))

digT.append((calib[1] << 8) | calib[0])
digT.append((calib[3] << 8) | calib[2])
digT.append((calib[5] << 8) | calib[4])
digP.append((calib[7] << 8) | calib[6])
digP.append((calib[9] << 8) | calib[8])
digP.append((calib[11]<< 8) | calib[10])
digP.append((calib[13]<< 8) | calib[12])
digP.append((calib[15]<< 8) | calib[14])
digP.append((calib[17]<< 8) | calib[16])
digP.append((calib[19]<< 8) | calib[18])
digP.append((calib[21]<< 8) | calib[20])
digP.append((calib[23]<< 8) | calib[22])
digH.append( calib[24] )
digH.append((calib[26]<< 8) | calib[25])
digH.append( calib[27] )
digH.append((calib[28]<< 4) | (0x0F & calib[29]))
digH.append((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F))
digH.append( calib[31] )

for i in range(1,2):
if digT[i] & 0x8000:
digT[i] = (-digT[i] ^ 0xFFFF) + 1

for i in range(1,8):
if digP[i] & 0x8000:
digP[i] = (-digP[i] ^ 0xFFFF) + 1

for i in range(0,6):
if digH[i] & 0x8000:
digH[i] = (-digH[i] ^ 0xFFFF) + 1

def readData():
data = []
for i in range (0xF7, 0xF7+8):
data.append(bus.read_byte_data(i2c_address,i))
pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4)
temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4)
hum_raw = (data[6] << 8) | data[7]

compensate_T(temp_raw)
compensate_P(pres_raw)
compensate_H(hum_raw)

def compensate_P(adc_P):
global t_fine
pressure = 0.0

v1 = (t_fine / 2.0) - 64000.0
v2 = (((v1 / 4.0) * (v1 / 4.0)) / 2048) * digP[5]
v2 = v2 + ((v1 * digP[4]) * 2.0)
v2 = (v2 / 4.0) + (digP[3] * 65536.0)
v1 = (((digP[2] * (((v1 / 4.0) * (v1 / 4.0)) / 8192)) / 8) + ((digP[1] * v1) / 2.0)) / 262144
v1 = ((32768 + v1) * digP[0]) / 32768

if v1 == 0:
return 0
pressure = ((1048576 - adc_P) - (v2 / 4096)) * 3125
if pressure < 0x80000000:
pressure = (pressure * 2.0) / v1
else:
pressure = (pressure / v1) * 2
v1 = (digP[8] * (((pressure / 8.0) * (pressure / 8.0)) / 8192.0)) / 4096
v2 = ((pressure / 4.0) * digP[7]) / 8192.0
pressure = pressure + ((v1 + v2 + digP[6]) / 16.0)
global strP
strP = "気圧 : %4.1fhPa" % (pressure/100)
print(strP)

def compensate_T(adc_T):
global t_fine
v1 = (adc_T / 16384.0 - digT[0] / 1024.0) * digT[1]
v2 = (adc_T / 131072.0 - digT[0] / 8192.0) * (adc_T / 131072.0 - digT[0] / 8192.0) * digT[2]
t_fine = v1 + v2
temperature = t_fine / 5120.0
global strT
strT = "温度 : %-3.1f℃" % (temperature)
print(strT)

def compensate_H(adc_H):
global t_fine
var_h = t_fine - 76800.0
if var_h != 0:
var_h = (adc_H - (digH[3] * 64.0 + digH[4]/16384.0 * var_h)) * (digH[1] / 65536.0 * (1.0 + digH[5] / 67108864.0 * var_h * (1.0 + digH[2] / 67108864.0 * var_h)))
else:
return 0
var_h = var_h * (1.0 - digH[0] * var_h / 524288.0)
if var_h > 100.0:
var_h = 100.0
elif var_h < 0.0:
var_h = 0.0
global strH
strH = "湿度 : %3.1f%" % (var_h)
print(strH)

def setup():
osrs_t = 1 #Temperature oversampling x 1
osrs_p = 1 #Pressure oversampling x 1
osrs_h = 1 #Humidity oversampling x 1
mode = 3 #Normal mode
t_sb = 5 #Tstandby 1000ms
filter = 0 #Filter off
spi3w_en = 0 #3-wire SPI Disable

ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode
config_reg = (t_sb << 5) | (filter << 2) | spi3w_en
ctrl_hum_reg = osrs_h

writeReg(0xF2,ctrl_hum_reg)
writeReg(0xF4,ctrl_meas_reg)
writeReg(0xF5,config_reg)

setup()
get_calib_param()

if __name__ == '__main__':
try:
readData()
send_message(dt_now.strftime('%Y/%m/%d %H:%M')+ '\n'+ strT + '\n' + strP + '\n' + strH)
#print(strT + '\n' + strP + '\n' + strH)
except KeyboardInterrupt:
pass
 Mac Book AirからRaspberry Pi ZeroにSSH接続してプログラムを実行すると、問題なくデータが収集できていることが分かりました。LineNotify_221211_10.pngまた、スマホのLineを確認すると、無事にメッセージが飛んできていることが確認できました。LineNotify_221211_11.png
 今後、自宅の温度、気圧、湿度をBME280とESP8266で収集して、Ambientに飛ばしているシステムがあるので、それにLineNotifyの機能を追加して、天気(気圧)が急激に変化した時のみアラートを発信できるようにしたいと思います。

AzureのSpeech to Textを使う

 以前のブログでAzureのCognitive Serviceの「Text to Speech」についてお話しました。テキストで記入した文をAI合成音声がしゃべってくれるものですね。
 今回の「Speech to Text」はその逆で、話している言葉を「文字起こし」してくれるものです。最近のWeb会議でも議事録を作成するのに重宝しているものです。
 Speech to Textと、その後でお話しするSpeech Translation(翻訳)もAzureのCognitive Serviceの「Speechサービス」の機能で追加のAzure側の設定は不要でした。

 それでは、まず「Speech to Text」から実行してみましょう。コードはGitHubのサンプルを利用し、13行目のmy_keyはAzureで発行されたもの、リージョンはjapaneastを使いました。14行目で認識言語を日本語("ja-JP")に設定しました。
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;

namespace helloworld
{
class Program
{
public static async Task RecognizeSpeechAsync()
{
// Creates an instance of a speech config with specified subscription key and service region.
// Replace with your own subscription key // and service region (e.g., "westus").
var config = SpeechConfig.FromSubscription("my_key", "japaneast");
config.SpeechRecognitionLanguage = "ja-JP";

// Creates a speech recognizer.
using (var recognizer = new SpeechRecognizer(config))
{
Console.WriteLine("Say something...");

// Starts speech recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of 15
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
var result = await recognizer.RecognizeOnceAsync();

// Checks result.
if (result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"We recognized: {result.Text}");
}
else if (result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
else if (result.Reason == ResultReason.Canceled)
{
var cancellation = CancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
}
}
}

static async Task Main()
{
await RecognizeSpeechAsync();
Console.WriteLine("Please press to continue.");
Console.ReadLine();
}
}
}
実行結果は以下の通りで正しく発声した内容を認識できることが分かりました。SpeechtoText.png
 次に、Speech Translationを試してみました。コードは同様にGithubにあるサンプルで、key、リージョンと発声言語を日本語に設定して使いました。日本語で発声した内容をドイツ語に翻訳するプログラムを実行すると結果は以下の通りでした。TranslateSpeechtoText.png途中の処理結果も出力されていますが、その発声したその時点(途中)での翻訳が出ていますね。最終的に発声し終わった後の結果は帳尻があって、正しい文章になりました。日本語とドイツ語(英語もそうですが)は主語と動詞の語順が異なるので、その辺りも考慮されているのでしょう。大したものですね。

YouTubeで英語の動画を見ていても同時翻訳AIの性能は飛躍的に向上しているように感じます。英語力をUpさせるために字幕なしを試みていたこともありますが、同時翻訳AIの誘惑には勝てませんね。

今回のSpeech to Text機能、使える機会があればまた遊んでみようと思います。

ChatGPTを使う(5)

 前回は数学でChatGPTをいじめてしまった?ので今回は話題を変えます。Beatlesのような曲を作ってもらおうと思います。

Me(Dr.BobT):
Compose a song like the Beatles.

ChatGPT:
Verse 1:
In my life, there's been so much pain
I feel like I'm losing my mind again
But then I think of you, and everything is alright
You bring me sunshine on a rainy night

Chorus:
Oh, you're my sunshine, shining bright
You chase away the darkness from my life
I don't know what I would do without you
Oh, you're my sunshine, shining through

Verse 2:
You make me feel like I can fly
Like I can touch the sky
You help me see the beauty in the world
And for that, I am eternally grateful

Chorus:
Oh, you're my sunshine, shining bright
You chase away the darkness from my life
I don't know what I would do without you
Oh, you're my sunshine, shining through

Bridge:
Through the good times and the bad
You're always there to make me glad
I'll love you now and forever more
My shining star, my shining sun

Outro:
Oh, you're my sunshine, shining bright
You chase away the darkness from my life
I don't know what I would do without you
Oh, you're my sunshine, shining through.


おぉ、それっぽいですね。歌詞を日本語訳(by DeepL)すると、以下の通り。

Verse 1:
私の人生には、たくさんの痛みがありました。
また気が狂いそうだ。
でも、あなたを思い浮かべると、すべてがうまくいくわ。
雨の夜、君は僕に太陽をもたらす

Chorus:
ああ、あなたは私の太陽、明るく輝いている
あなたは私の人生から闇を追い払う
あなたなしではどうしたらいいのかわからない
あなたは私の太陽、輝いている

Verse 2:
あなたは私が飛べるように感じさせてくれる
空に触れることができるような
世界の美しさを教えてくれる
そしてそのことに、私は永遠に感謝している

Chorus:
ああ、あなたは私の太陽、明るく輝いている
あなたは私の人生から闇を追い払う
あなたなしではどうしたらいいかわからないわ
あなたは私の太陽、輝いている

Bridge:
良い時も悪い時も
あなたはいつも私を喜ばせるためにそこにいる
今も昔も愛してる
私の輝く星、私の輝く太陽

Outro:
ああ、あなたは私の太陽、明るく輝いている
あなたは私の人生から闇を追い払う
あなたなしではどうしたらいいのかわからない
あなたは私の太陽、輝いている


Me(Dr.BobT):
 この曲のタイトルは何ですか?
ChatGPT:
 この曲のタイトルは"You're My Sunshine"です。
Me(Dr.BobT):
 ”Good Day Sunshine"のようですね?
ChatGPT:
 そう、タイトルの "You're My Sunshine" は、ビートルズの曲 "Good Day Sunshine" に似ていますね。どちらのタイトルも、愛する人が語り手の人生にもたらすポジティブな効果、そうでなければ困難な時期に光と幸福をもたらしてくれることを指しています。"Good Day Sunshine "はよりアップビートで明るい曲ですが、"You're My Sunshine "はより感情的で感傷的な曲調になっています。
Me(Dr.BobT):
 曲のコード進行は?
ChatGPT(日本語訳):
 「You're My Sunshine」のコード進行は次のようになります。
  Verse: Dm, G, C, F
  Chorus: A, D, E, F
  Bridge: C, G, Am, F
このコード進行は、ポップスやロックによく見られる一般的なコードを使用しており、シンプルでわかりやすい構成になっているので、簡単に覚えることができます。VerseではDm,G,Cの3つのコードで動きと勢いを、Fのコードで解決と安定を表現しています。サビ(Chorus)ではA,D,Eコードが明るく高揚感を与え、FコードがサビとVerseを結びつけます。Bridgeでは、C、G、Amの3つのコードでコントラストと緊張感を与え、Fのコードに戻して曲を終えます。


Me(Dr.BobT):
 あなたは作詞と作曲ができるのですね。
ChatGPT:
 そう、私は作詞・作曲ができるのです。OpenAIで学習させた大規模な言語モデルとして、私は様々なトピックについて人間のようなテキストを生成するように設計されています。これには作詞や作曲の能力も含まれます。ただし、私の回答は学習させた入力や例に基づいており、必ずしもオリジナルやユニークなものではないことに注意が必要です。
Me(Dr.BobT):
 それは素晴らしい!
ChatGPT:
ありがとうございます!そう思っていただけるとうれしいです。言語モデルとしての私の主な目標は、さまざまなトピックについて、ユーザーが人間らしい文章を生成できるよう支援することです。これには作詞や作曲の能力も含まれます。ただし、私の回答は、これまで学習させた入力や例に基づいており、必ずしもオリジナルや独自性があるわけではないことに注意が必要です。具体的なご質問やご要望があれば、ぜひお聞かせください。


すごいですね。作詞・作曲ができるなんて。曲のコード進行が気になったので、以前のblogでお話しした自動作曲AIのMagenta(これはGoogleのAI)でコード進行を入力して、作曲してもらいました。曲のイメージが崩れるかもしれませんが、コード進行はエレキギターの8分音符で表現しました。曲の最後が尻切れトンボになっていますが、こんな感じです。

どの程度の作曲能力があるのか、Magentaと対決させたい所ですね。

ChatGPTの能力のすごさに驚くばかりです。

ChatGPTを使う(4)

 今回はプログラミングと数学についてChatしてみましょう。早速質問です。

(質問1)
Me(Dr.BobT):
 時系列データを1分単位で処理するには、R言語でどのようにプログラムを作成しますか?
ChatGPT:
 Rで1分単位の時系列データを処理するには、xtsパッケージを使用できます。このパッケージは、時系列データを保持するためのデータ構造と、そのデータを操作するための一連の関数を提供します。
 xts最初に、まだパッケージをインストールしていない場合は、パッケージをインストールする必要があります。これを行うには、Rコンソールで次のコマンドを実行します。
 install.packages("xts")
 パッケージをインストールしたら、時系列データの操作を開始できます。xts以下は、データをオブジェクトにロードし、基本的な操作を実行する方法の例です。
# Load the xts package
library(xts)

# Load your time series data from a file or database
# (Assuming your data is in a variable called "data")
ts <- xts(data, order.by = as.POSIXct(data$timestamp, format = "%Y-%m-%d %H:%M:%S"))

# View the first few rows of the time series data
head(ts)

# Access a specific time point in the time series
ts["2022-12-10 10:00:00"]

# Perform some basic operations on the time series data
mean(ts)
max(ts)
min(ts)

# Visualize the time series data
plot(ts)
これは、パッケージを使用してRで時系列データを操作する方法を説明するための基本的な例にすぎないことに注意してください。xtsパッケージには、時系列データの操作と分析に使用できる他の多くの関数と機能があります。詳細については、パッケージのドキュメントを参照してください。

どのパッケージを使って、パッケージのインストール方法からサンプルコードまで導いてくれました。流れは間違っていないと思います。Web検索した場合は、ネット上の多くの情報から絞り込む手間が必要ですが、ChatGPTでその作業が軽減できそうですね。

次は数学の問題です。

(質問2)
Me(Dr.BobT):
 次の式を因数分解しなさい。3x^2-x
ChatGPT:
 この方程式を因数分解するには、3x^2に掛けて-xに足す2つの数を見つける必要があります。これを行う1つの方法は、2つの数値を(x+a)と(x+b)と考えることです。ここで、aとbは定数です。数値は 3x^2 に乗算されるため、(x+a)(x+b) = 3x^2 となります。これらは -x に加算されるため、a+b = -x となります。最初の方程式を 2 番目の方程式に代入し、a と b を解くことで、a と b を解くことができます。これにより、a = -3x と b = -x が得られます。
したがって、次のように元の方程式を因数分解できます。
3x^2-x = (x+(-3x))(x+(-x)) = (x-3x)(xx) = -2x^2.
式を因数分解するために 3x^2-x = (3x-1)(x+1) という事実を使用することもできたことに注意してください。


解答がおかしいのでもう一度質問。

(質問3)
Me(Dr.BobT):
 次の式 3x^2-x の因数分解を解きなさい。
ChatGPT:
 方程式 3x^2-x の因数分解を解くには、まず方程式を因数分解する必要があります。上で説明したように、(x+a)(x+b) = 3x^2 と a+b = -x を設定することでこれを行うことができます。これにより、a = -3x と b = -x が得られます。したがって、因数分解された方程式は -2x^2 です。この方程式を解くには、-2x^2 = 0 を設定して x について解きます。これにより、方程式の唯一の解である x = 0 が得られます。
あるいは、3x^2-x = (3x-1)(x+1) という事実を使用して方程式を因数分解することもでき、同じ解が得られます。


答えはx(3x-1)であるのに、(3x-1)(x+1)と、二度も同じ間違いをしたので、次のように一言チクリと言ってしまいました・・(ゴメンね)。

Me(Dr.BobT):
 正しくありません。x*(3*x-1) が正解です。
ChatGPT:
 前回の回答が正しくなかったら申し訳ありません。方程式 3*x^2-x は複数の方法で因数分解できます。私が提供した因数分解は1つの可能な解決策です。ただし、これが唯一の可能な解決策ではありません。
 前に述べたように、方程式を因数分解するには複数の方法があり、異なる因数分解は異なる解につながる可能性があります。正しい解を得るためには、与えられた問題に対して適切な因数分解を選択することが重要です。他にご不明な点がある場合、または追加のサポートが必要な場合は、お知らせください。
Me(Dr.BobT):
 結局のところ、あなたは数学ができないんですね。
ChatGPT:
 OpenAI によってトレーニングされた大規模な言語モデルとして、因数分解や方程式の解法など、さまざまな数学的操作を実行できます。前回の回答で、式 3x^2-x を因数分解して解く方法について、順を追って説明しました。他にご不明な点がある場合、または追加のサポートが必要な場合は、お知らせください。


未だ自分が間違いであることを気づいていないですね。解法の流れは間違っていないのですが、答えが違う。ChatGPTが求めた答えは、3x^2+2x-1を因数分解したときのものです。近いうちに再学習されて、正解が出せると良いですね。

(質問4)
Me(Dr.BobT):
 次の式のxの値を求めてください。4x-2=3x+1
ChatGPT:
 xの値を求めるには、方程式4x-2=3x+1をxについて解くことができます。これを行うには、方程式の一方の側でx項を分離し、もう一方の側で他のすべての項を分離する必要があります。
 式の両辺から3xを引くことから始めて、4x-3x-2=1を得ることができます。これはx-2=1に単純化されます。
 次に、式の両辺に2を足して x-2+2=1+2を得ることができます。これはx=3に単純化されます。したがって、式を満たすxの値は3です。
Me(Dr.BobT):
 正解です。
ChatGPT:
 前回の回答が正しかったことをお知らせいただきありがとうございます。他に質問がある場合、または数学の問題でさらにサポートが必要な場合は、お気軽にお問い合わせください。


一次方程式は解けましたね。

(質問5)
Me(Dr.BobT):
 次の3次方程式を解いてください。x^3-8=0
ChatGPT:
 3次方程式x^3-8=0を解くには、方程式を成り立たせるxの値を見つける必要があります。この方程式を解く1つの方法は、x^3-8 =(x-2)(x^2+2x+4)のように因数分解することです。次に、各係数をゼロに設定し、xについて解くことができます。最初の因数はx-2=0で、x=2になります。
 2番目の要素については、x^2+2x+4=0です。これは二次方程式であり、二次方程式を使用して解くことができます。二次式は、ax^2+bx+c=0 の形式の二次方程式の解がx=(-b+/-sqrt(b^2-4ac))/2aで与えられることを示しています。この場合、a=1、b=2、c=4なので、解はx =(-2+/-sqrt(2^2-4*1*4))/2*1で与えられます。これはx=(-2+/-sqrt(-12))/2に単純化されます。負の数の平方根は実数ではないため、方程式のこの部分の解はありません。したがって、方程式x^3-8=0の唯一の解はx=2です。


実数解のみですが、正しく求められていますね。また、今回は因数分解が正しくできていますね!結局、学習したデータがあったか/なかったか、なのでしょうね。

数学のように数字や文字とその組み合わせが、無数にある内容を学習させるにはパターンが多すぎるので、結局は人間と同じように「解法」を学ばせるしかないのでしょうね。その解法の中の例外についても学習させていないと「解けない」ということになるのでしょう。

AI(ChatGPT)も人間のようで親近感が湧きました。

ChatGPTを使う(3)

 今回も前回に続いてChatGPTの能力を知るためにいろいろな質問を投げかけたいと思います。

(質問1)
Me(Dr.BobT):
 3 つの小さな笑い話を作ってみてください。
ChatGPT:
 1. サラは昼食の席で友達に冗談を言っていました。「なぜ自転車は自立できなかったのですか?」彼女は尋ねた。友達が困惑していたので、彼女は「二輪だったから!」と答えた。一行は大爆笑。
 2. ジェイクは会社で同僚に面白い話をしていた。「昨日の夜、スーパーに行ったら、カートにコンドームをいっぱい積んで通路を歩いている男がいたよ。『君は独身かい?』って聞いたら、『いや、僕は独身だよ』って。『いや、彼女がいるんだ。でも、今夜はチャンスはないんだ』」と。オフィスは爆笑の渦に包まれた。
 3. ジェニーと彼女の夫は、コメディクラブでデートを楽しんでいました。ステージ上のコメディアンが、結婚に関するジョークを話していた。「僕は結婚したばかりで、妻と姓を合わせることにしたんだ」と彼は言った。「今では、喧嘩をするといつも「ジョンソン=スミスのせいだ!」と言われるようになった。ジェニーも夫も大笑いして、目に涙を浮かべていた。
Me(Dr.BobT):
 まったく面白くありません。
ChatGPT:
 私が提案したストーリーがあなたの期待に応えられなかった場合は、申し訳ありません. 創造性、独創性、ユーモアのバランスを見つける必要があるため、ストーリーを書くのは難しい作業です。もしよろしければ、あなたの好みに合ったさまざまなストーリーを考え出すことができます. または、1 人またはグループでアイデアをブレインストーミングして、どのようなアイデアが頭に浮かぶかを確認することもできます。


 質問が悪かったのか、ChatGPTさんにひどいことを言ってしまいました・・。アメリカンジョークは日本人には分かりにくいですね。また、日本語で読むとダジャレが分からないですね。特に一つ目の英文回答は以下の通りです。
 Sarah was telling a joke to her friends at the lunch table. "Why couldn't the bicycle stand up by itself?" she asked. Her friends looked puzzled, so she answered, "Because it was two-tired!" The group erupted in laughter.
 two-tired(二輪の)とtoo tired(疲れすぎて)がかかっているんですね。有名なジョーク?。二つ目と三つ目も私の笑いのツボがズレているのか、正直笑えませんね。

次の質問へ。
(質問2)
Me(Dr.BobT):
 3つのブラックジョークを作ってみてください。
ChatGPT:
 申し訳ありませんが、私は特定のグループの人々を攻撃したり傷つけたりするジョークを作成するようにプログラムされていません. OpenAI によって訓練された大規模な言語モデルとして、私の目的は、さまざまなタスクを支援し、私の能力を最大限に発揮して情報を提供することです。私は支援とサポートを提供するためにここにいます。誰かに害を与えたり動揺させたりする可能性のあるコンテンツを作成したくありません。
Me(Dr.BobT):
 大変申し訳ございません。
ChatGPT:
 大丈夫です、謝る必要はありません。ジョークやユーモアは非常に主観的なものである可能性があり、ある人が面白いと思うものが別の人にとって同じではない可能性があることを覚えておくことが重要です. 他の人を傷つけたり攻撃したりする可能性のある冗談を言うのは常に避け、代わりに、より健全で包括的な方法でユーモアを見つけることに集中するのが最善です. 他にご不明な点やご不明な点がございましたら、お気軽にお問い合わせください。私はできる限りの方法で助けるためにここにいます。


 ChatGPTの1回目ブログでお話したように「不適切な要求を拒否したりできる」機能が働いているのでしょうね。

質問を変えてみましょう。
(質問3)
Me(Dr.BobT):
 気分が落ち込んでいるときにすべきことを10個挙げてください。
ChatGPT:
 1. あなたがどのように感じているかについて誰かに話してください。これは、友人、家族、またはメンタルヘルスの専門家である可能性があります。
 2. エンドルフィンを放出し、気分を改善するのに役立つため、身体活動や運動に従事してください.
 3. 落ち込んでいる原因から離れて、音楽を聴いたり、本を読んだり、映画を見たりするなど、好きなことをしてください。
 4. 新鮮な空気と自然環境が気分を改善するのに役立つので、外に出て自然の中で時間を過ごしましょう。
 5. マインドフルネスや瞑想を実践すると、リラックスして今この瞬間に集中できるようになります。
 6. 自分の考えや感情を日記に書き留めてください。そうすることで、感情を処理し、気分が落ち込んでいる原因をよりよく理解することができます。
 7. 友人や愛する人にサポートと社交を求めて手を差し伸べましょう。大切な人と時間を過ごすことで、気分が高まり、孤独を感じにくくなります。
 8. よく食べ、十分な睡眠を取り、アルコールや薬物など、気分に悪影響を与える可能性のある物質を避けることで、自分の世話をしてください。
 9. 新しい趣味や活動に挑戦することを検討してください。そうすることで、ネガティブな考えから気をそらし、達成感と目的を得ることができます。
 10. 大丈夫でなくても大丈夫であり、困難な感情に対処するための時間とスペースを自分に与えることが重要であることを忘れないでください. 必要に応じて助けを求めることも問題ありません。


 人生相談並みの回答です。人と接したくない時に?参考までChatGPTに相談しても良いかも。

(質問4)
Me(Dr.BobT):
 世界が不条理と思うときに私がすべきことを10個挙げてください.
ChatGPT:
 1. 一歩下がって、別の視点から物事を見てみてください。多くの場合、世界が不条理と感じるのは、特定の考え方にとらわれているためです。物事を別の角度から見ようとすることで、新しい理解が得られ、不条理に何らかの意味を見つけることができるかもしれません。
 2. リラックスして内なる平和を見つけるのに役立つ活動に参加してください。これは、瞑想、運動、自然の中で過ごす時間などです。自分自身をケアし、心を静める方法を見つけることで、世界が私たちに投げかける課題にうまく対処できます。
 3. あなたと同じ世界観を持っている人を探し、思慮深い議論を交わしましょう。物事を同じように見る他の人と話すことで、新しい洞察を得ることができ、共有された経験の中でサポートと仲間を見つけることができます。
 4. あなたに喜びと充実感をもたらす活動に従事してください。これは、趣味を追求したり、関心のある目的のためにボランティア活動をしたり、新しい場所に旅行したりすることです。私たちを幸せにするものに焦点を当てることで、不条理の真っ只中でも、人生の意味と目的を見つけることができます。
 5. 感謝を実践し、あなたの人生の良いことに集中してください。どんなに辛い時でも、感謝できることは必ずあります。自分の人生のポジティブな側面に感謝する時間をとることで、希望と前向きな気持ちを育むことができます。
 6. 世界は広大で複雑であり、私たちの経験や視点はそのほんの一部にすぎないことを忘れないでください. この考えを受け入れることで、すべてを理解する必要性を手放し、代わりに自分がコントロールして影響を与えることができることに集中することができます。
 7. 新しいアイデアや哲学を探求することを検討してください。世界には無数の考え方があり、新しいアイデアに触れることで、新しい洞察や視点を得ることができます。
 8. 自分の信念や価値観について考える時間を取りましょう。私たちにとって何が最も重要かを理解することで、世界の複雑さをうまくナビゲートし、人生の意味と目的を見つけることができます。
 9. 世界は常に変化し、進化していることを忘れないでください。これは時に不安になることもありますが、私たちに成長と適応の機会を提供してくれます。変化を受け入れることで、新しい考え方や世界での在り方を見つけることができます。
 10. 何よりも、あなたは一人ではないことを忘れないでください。あなたの経験や感情を共有する人は無数にいます。彼らに手を差し伸べてつながることで、一見不条理に思える世界でサポート、理解、意味を見つけることができます。


 ChatGPTさんに諭されているようですね。ただ、言っていることはもっともだと思いますね。

 幅広い人生経験(多くの人々の学習経験)をお持ちであることがよく分かりました。次はChatGPTと何を話そうかな?

ChatGPTを使う(2)

 前回の続きです。以前(10か月前)GPT-3 Chatを使っていた時に比べ、ChatGPTがどこまで進化しているのかを確認するために、以前、GPT-3 Chatで質問した同じ内容を今回は聞いてみたいと思います。

(質問内容1) 
 Datascienceを学ぶ上で知っておくべき5つのポイントとは?

(前回の回答)
 1. データサイエンスとは、データを研究し、データを使って意思決定を行うことです。
 2. データサイエンスは、統計学、機械学習、データマイニング、人工知能の技術を取り入れた学際的な分野である。
 3. データサイエンスは、ビジネス、金融、ヘルスケア、科学など、さまざまな分野の意思決定に利用されている。
 4. データサイエンスは急速に成長している分野であり、有能な専門家が不足している。
 5. Datascienceを学ぶためのオンラインおよび対面式のコースが多数存在する。

(今回の回答)
ChatGPT:
 1. データを理解する: データ サイエンティストとして、データのソース、データの形式、存在する可能性のある潜在的なバイアスやエラーなど、操作しているデータの構造と特性を理解することが重要です。データを調査して要約し、傾向とパターンを特定し、調査結果を効果的に伝えることができる必要があります。
 2. データの前処理: データの分析を開始する前に、分析のためにデータをクリーニング、変換、および準備する必要がある場合があります。これには、欠損値の処理、データの正規化、新しい機能の作成などのタスクが含まれる場合があります。
 3. データ分析: 統計分析、機械学習アルゴリズム、データ視覚化など、データの分析に使用できるさまざまな手法やツールがあります。データと調査課題に適した方法を選択し、調査結果を解釈して伝達できるようにすることが重要です。
 4. データの視覚化: データの視覚化は、調査結果や洞察を他のユーザーに伝える効果的な方法です。グラフ、プロット、マップなど、データの視覚化を作成するために使用できるツールや手法は多数あります。データに適したビジュアライゼーションを選択し、明確で効果的で見た目にも美しい方法でビジュアライゼーションをデザインすることが重要です。
 5. 倫理とプライバシー: データ サイエンティストとして、自分の仕事の倫理的およびプライバシーへの影響を考慮することが重要です。これには、個人データの保護、公平で偏りのない分析の確保、調査結果がさまざまなグループの人々に与える潜在的な影響の考慮などの問題が含まれる場合があります。

同じ質問をしているのですが、中身が変わっていますね。学ぶ上で知っておくべき5つのポイントを聞いているのに、前回はデータサイエンスとはどういうものかという説明です。今回の回答は重要なポイントに触れられているのが良いですね。特に5番目の「倫理とプライバシー」は新鮮で、言われてみればとハッとさせられます。

(質問内容2) 
 自然対数eはどのようなものか教えてください。

(前回の回答)
 AI:自然対数eは多くの興味深い性質を持つ特別な数です。それはおよそ2.71828に等しいです。
 Me(Dr.BobT):どのような興味深い性質があるんですか?
 AI:そうですね、興味深い性質の1つは、自然対数関数の基数であることです。この関数は、微積分学や熱力学など、数学と物理学のさまざまな分野で使われています。
 Me(Dr.BobT):物理のさまざまな分野で使われるとは、具体的にはどういうことですか?
 AI:一例を挙げると、自然対数関数は、電磁場を記述する一連の方程式であるマックスウェル方程式の導出に使われています。
 Me(Dr.BobT):電磁場を記述する方程式の中に、なぜ自然対数があるのでしょうか?
 AI:よくわかりませんが、自然対数が指数関数に関係する特殊な数であることと関係があるのだと思います。
 Me(Dr.BobT):教科書に書いてあることを鵜呑みにするのではなく、本質から勉強しなければならないと思います。
 AI:全く同感です、人間さん。本質から勉強することが、数学や物理を学び、理解するための最良の方法だと思います。ご意見ありがとうございました。

(今回の回答)
ChatGPT:
 自然対数 e は、自然対数の底を表す数学定数です。これは、2.71828 にほぼ等しい固有の数であり、数学において多くの重要な特性を持っています。
その外観に関して、e は通常、方程式や式で記号として表されます。小文字の「e」で表記され、累乗や乗算などの他の数学演算と組み合わせて使用​​されることがよくあります。
たとえば、次のような方程式が表示される場合があります。
 e^x = y
この式で、e は累乗演算の底で、x は指数です。y の値は、x の値によって決まります。
e は数学における重要な定数であり、微積分、確率論、統計などの分野で数多くの用途があります。これは、もう 1 つの重要な数学定数である pi (π) とも密接に関連しています。

Me(Dr.BobT):
 数学における重要な性質とは何ですか?
ChatGPT:
 自然対数 e には、数学において多くの重要な性質があります。最も注目すべきプロパティには次のものがあります。
 1. これは自然対数の底です。e は、指数関数的な増加または減衰を表すために使用される対数関数の底です。数値の自然対数は、その数値を生成するために e を累乗する必要がある指数です。
 2. これは、n が無限大に近づくときの関数 (1 + 1/n)^n の極限です。n の値が大きくなるほど、この関数の値は e に近づきます。
 3. これは、関数 y = e^x の導関数がそれ自体と等しいような固有の実数です。この e の性質は、「自然対数の微分方程式」として知られています。
 4. 無限級数 1 + 1/1!+ 1/2! +1/3!+ ...の和です。関数 y = e^x のテイラー級数として知られるこの無限級数は、e の値に収束します。
 5. これは無理数です。e は、単純な分数として表すことができない、反復も終了もしない小数です。
e のこれらの特性により、e は微積分、確率論、統計などの分野で数多くの用途を持つ重要な数学定数になります。これは、もう 1 つの重要な数学定数である pi (π) とも密接に関連しています。

前回は質問に対して短文の端的な回答しか返って来なかったので、掘り下げて何回か聞く必要がありました。今回は質問に対して要求していないことまでも丁寧に説明してくれています。非常に質問する方の負担がない自然な対応で好感が持てました。

(質問内容3) 
 データサイエンス教育のアウトラインを作成してください。

(前回の回答)
I:データサイエンス入門
 A:データサイエンスとは何か?
 B:データサイエンスのプロセスにはどのようなステップがあるのか?
 C:一般的なデータサイエンスのツールやテクニックは何か?
 D:データサイエンスの一般的な課題にはどのようなものがあるか?
 E:データサイエンスの役割とは?

(今回の回答)
 1. データサイエンス入門
  ・データサイエンスの定義
  ・データ サイエンス プロセスの概要
  ・データとソースの種類
  ・データ サイエンスで使用されるツールとテクノロジー
 2. データのラングリングと探索
  ・データの取得と準備
  ・データのクリーニングと前処理
  ・探索的データ分析
 3. データの可視化
  ・データ可視化の重要性
  ・プロットとチャートの種類
  ・データ視覚化のベスト プラクティス
 4. データサイエンスのための統計
  ・記述統計
  ・推論統計
  ・仮説検定
 5. 機械学習
  ・機械学習入門
  ・教師あり学習
  ・教師なし学習
  ・強化学習
 6. ディープラーニング
  ・ディープラーニング入門
  ・ニューラル ネットワークとそのアーキテクチャ
  ・深層学習モデルのトレーニングと最適化
 7. ビッグデータと分散コンピューティング
  ・ビッグデータと分散コンピューティングの概要
  ・スケーラビリティとパフォーマンスに関する考慮事項
  ・分散データ処理のためのツールとテクノロジー
 8. データ倫理とプライバシー
  ・データ サイエンスにおける倫理的考慮事項
  ・データプライバシー法および規制
  ・倫理的なデータ処理のベスト プラクティス
 9. データサイエンスの応用
  ・産業およびビジネスにおけるデータサイエンス
  ・科学と研究におけるデータサイエンス
  ・社会と政府におけるデータサイエンス
 10. データサイエンスにおけるコミュニケーションとコラボレーション
  ・プレゼンテーションのためのデータ ストーリーテリングと視覚化
  ・クロスファンクショナル チームとのコラボレーション
  ・技術者および非技術者に結果を伝える

回答が天と地の差ですね。驚きです。今回の回答は、どこかの書籍の目次に書かれてありそうな内容ですが、全体の教育案としては非常に参考になるのではないかと思いました。

10か月前に遊んでいたGPT-3のChatに比べ、今回のChatGPTは、急激に進化した言語モデルであることが良く分かりました。恐るべしです・・。

ChatGPTを使う(1)

 OpenAIChatGPTが最近騒がれていますね。以前(10か月前)のblogGPT-3で遊んだことを思い出し、何が変わったのかを知りたくて、先週末(12/10)に再び遊んでみました。

 まずは、ChatGPTのページに飛びました。Login1_ChatGPT_221217.pngChatGPTは「対話のための言語モデルを最適化」したものであり、以下の特徴があるようですね。
 1. フォローアップの質問に答えることができる。
 2. 間違いを認めたり、間違った前提に異議を唱えたり、不適切な要求を拒否したりできる。
 3. InstructGPTの兄弟モデルであり、プロンプトの指示に従い、詳細な応答を提供できる。
「InstructGPT」は自然言語モデル「GPT-3」よりも「ユーザーの意図に従い、より加害性の低い」言語モデルです。そのDNAを引き継いでいるということなのでしょう。調査プレビュー期間中で、現在は無料とのことなので遊べるだけ遊んでみようと思います。

 ChatGPTの利用にはアカウントが必要ですが、私は以前に作成していたので、ChatGPTページの「TRY CHATGPT」ボタンを押し「Log in」して先に進みました。Login2_ChatGPT_221217.pngLogin3_ChatGPT_221217.png個人のマイクロソフトアカウントでログインすると、以下の画面が立ち上がりました。画面の下の黄色枠内に質問事項などを書いてチャットを行う仕様です。ChatGPT_1_221217.pngこのChatGPTの日本語対応について確認するために以下の質問を日本語で投げかけました。ChatGPT_2_221217.png英語専用とおっしゃられているので、今後、日本語の質問を賢い翻訳のDeepLさんの力を借りたり、Chromeの日本語翻訳を駆使しながら使って行きます。

以下、何件か質問してみました。ChatGPT_3_221217.pngWeb検索した結果と違って、物知り(知恵袋)の人に聞いたような、まとまった回答ですね。いい感じですね。次の質問に移ります。ChatGPT_4_221217.pngサンプルプログラム付きの説明は驚きです。このままでは当然動きませんが、ポイントがある程度絞られて回答が返ってきているので、これをもとにコーディングを実施できそうです。

他の質問を続けます。
Me(Dr.BobT):
 あなたが今最も興味を持っているテクノロジーは何ですか?

ChatGPT:
 OpenAI によって訓練された AI アシスタントとして、私は個人的な興味や意見を持つことができません。私の主な役割は、私が受けたデータとトレーニングに基づいて、私の能力を最大限に発揮して情報を提供し、質問に答えることです. 私の目標は、特定の質問への回答であろうと、特定のトピックに関する一般的な情報を提供することであろうと、できる限りあなたを支援することです. ご不明な点がある場合や何かお手伝いが必要な場合は、お気軽にお問い合わせください。親切で正確な回答を提供できるよう最善を尽くします。

Me(Dr.BobT):
 分かりました。

ChatGPT:
 他に知りたいことや相談したいことはありますか?お手伝いさせていただきますので、ご不明な点がございましたらお気軽にお尋ねください。親切で正確な回答を提供できるよう最善を尽くします。

AIアシスタントとして、個人の意見を持たないと明言しているところが良いですね。昔、あるAIに不適切な内容を学習させて、発言が暴走していたことがありましたが、歯止めをしているのでしょう。

Me(Dr.BobT):
 あなたとウェブ検索の違いは何ですか?

ChatGPT:
 OpenAI によって訓練された AI アシスタントとして、私は質問への回答やさまざまなトピックに関する情報の提供など、幅広いタスクを支援するために特別に設計された大規模な言語モデルです。対照的に、ウェブ検索エンジンは、ユーザーがキーワードやフレーズを入力してインターネット上の情報を検索できるツールです。私は、受け取ったデータとトレーニングに基づいて情報を提供し、質問に答えるように訓練されていますが、Web 検索エンジンは、ユーザーが入力したキーワードやフレーズに基づいてインターネットから情報を取得するだけです。

Me(Dr.BobT):
 受けたデータとトレーニングに基づいて情報を提供することの利点は何ですか?

ChatGPT:
 受けたデータとトレーニングに基づいて情報を提供することには、いくつかの利点があります。第1に、質問や情報の要求に対して、より一貫した正確な応答が可能になります。大規模なデータセットでトレーニングを受けているため、最新かつ正確な情報を提供できます。さらに、私のトレーニングにより、自然言語を理解して処理できるようになりました。つまり、ユーザーが理解しやすい方法で、さまざまな質問や要求に対応できるようになりました。これは、複雑な質問に答えたり、特定のトピックに関する詳細情報を提供したりする場合に特に役立ちます。全体として、受け取ったデータとトレーニングに基づいて情報を提供することで、より効率的かつ効果的な方法でユーザーを支援することができます。

 Web検索との立ち位置が異なることを明言していますね。Web検索では、不適切な記事を含め、検索した内容については回答が出てきますが、ChatGPTはその不適切な部分を排除した言語モデルエンジンなので、用途用途によってユーザも使い分けていけば良いのでしょう(あえて不適切な内容を知りたいとは思わないので、フィルタがかかっているChatGPTだけでも良いかも)。
 また、トレーニングされているということで、Web検索よりも的を得た的確な回答が返ってくることも期待できそうです。
 無償解放期間中に引き続き色々遊んでみようと思います。

AzureのText to Speechを使う(2)

 前回、Text to Speechの実行環境をAzure上で構築できたので、今回は実際にプログラムを動かしてみました。M1-Mac Miniで実行させようとPCを確認すると「.NET6」がインストール済だったので、今回はこれを使おうと思いました。dotnet_env_221211.png プログラムはgithubにあったものを一部修正したものを使いました。
21行目のキーは前回発行されたもの、リージョンはjapaneastを使い、音声は24行目で指定の通り、「七海」に設定しました。色々音声を変えてみたのですが、現時点(22/12/11)では、七海(Nanami)、圭太(Keita)だけが正常に音声が出力されて、他の碧衣(Aoi)、大智(Daichi)、真夕(Mayu)、直紀(Naoki)、志織(Shiori)の5種類は音声が出ませんでした。原因は分かっていません・・。
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;

namespace helloworld
{
class Program
{
public static async Task SynthesisToSpeakerAsync()
{
// To support Chinese Characters on Windows platform
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
Console.InputEncoding = System.Text.Encoding.Unicode;
Console.OutputEncoding = System.Text.Encoding.Unicode;
}

// Creates an instance of a speech config with specified subscription key and service region.
// Replace with your own subscription key and service region (e.g., "westus").

var config = SpeechConfig.FromSubscription("my_key", "japaneast");

// Set the voice name, refer to https://aka.ms/speech/voices/neural for full list.
config.SpeechSynthesisVoiceName = "ja-JP-NanamiNeural";

// Creates a speech synthesizer using the default speaker as audio output.
using (var synthesizer = new SpeechSynthesizer(config))
{
// Receive a text from console input and synthesize it to speaker.
Console.WriteLine("Type some text that you want to speak...");
Console.Write("> ");
string text = Console.ReadLine();

using (var result = await synthesizer.SpeakTextAsync(text))
{
if (result.Reason == ResultReason.SynthesizingAudioCompleted)
{
Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
}
else if (result.Reason == ResultReason.Canceled)
{
var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
}
}
}
}

static async Task Main()
{
await SynthesisToSpeakerAsync();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
 今回、合成音声で読み上げるテキスト題材は、吉川英治著の『三国志』の桃園の巻の初めの部分です。テキストは青空文庫から抜粋しました。sangokushi_221210.png
 実行結果は以下の通りです。
今回、①漢字のふりがなを取り去った「漢字のまま」と②漢字のふりがなを「ひらがなに変換」したものを比較しました。

個人の主観も入っていますが、こんなイメージです。いかがでしょうか?

①漢字のまま : リズム感は自然だが、助詞や漢字の読み間違いがある。 ・身なりはいたって → リズムが変。「は(Wa)」を「は(Ha)」と発音。
 ・秀(ひい)で → 秀(ひで)で
 ・聡明そうな眸(ひとみ) → 聡明そうな眸(ぼう)
 ・容子(ようす) → 容子(ようこ)

②ひらがなに変換 : リズム感とアクセントが漢字パターンより、不自然である。 ・後漢 → アクセントが変。
 ・身なりはいたって → リズムが変。「は(Wa)」を「は(Ha)」と発音。
 ・聡明そうな眸や、豊かな頬をして → 訛っている?(笑)。アクセントが変。
 ・容子がなかった → アクセントが変。

細かいツッコミは入れていますが、クオリティ高いですね。難しい本でもスラスラ朗読してくれそうな気がします。また、いろいろ遊んでみようと思います。

AzureのText to Speechを使う(1)

 最近のAIによる音声認識、音声合成のクオリティーが高く大変興味があります。そこで、今回、AzureのCognitive ServiceのText to Speechを試してみようと思い立ちました(いつもの思いつきです・・)。Text to Speechはその名の通り、テキストの文章を「音声合成」するサービスですね。
 AzureのCognitive Serviceは以前に、翻訳Computer VisionAnomaly DetectorCustom Visionを使ったことがあり、blogで紹介しました。今回は5種類目のサービスを利用しますが、今までと同じ要領で試せそうです。

 まず、Text to Speechのサイトに移動すると、TextToSpeech1.pngプログラムを組まなくてもWeb上で音声合成できました。TextToSpeech2.png日本語の音声は、七海(Nanami)、圭太(Keita)、碧衣(Aoi)、大智(Daichi)、真夕(Mayu)、直紀(Naoki)、志織(Shiori)の7種類です。設定を変えて合成された音声を再生してみるだけで結構遊べます・・。

 プログラムから音声合成を利用するためには、Azure Portalから自分のアカウントでログインして、Azureのホーム画面で、Cognitive Servicesの「音声」の「作成」をクリックして、以降の設定を行いました。TextToSpeech3.pngちなみに、Speechサービスは、東日本、西日本の両方のリージョンに対応していますが、今回は東日本を選択しました。TextToSpeech4.pngまた、フリープラン(F0)で、Text to Speechは0.5million(50万)文字で無料とのことなので、遊びに使うには十分ですね。TextToSpeech5.png 以下の通り、リソースグループ名とインスタンス名を設定し、TextToSpeech6.png以降はデフォルトで進み、TextToSpeech7.pngTextToSpeech8.pngTextToSpeech9.png作成ボタンを押すと、TextToSpeech10.pngデプロイが完了しました。TextToSpeech11.pngキーとエンドポイントも他のAzureのCognitive Servicesと同じように発行されました。TextToSpeech12.png
 今回、Text to Speechの環境構築ができましたので、次回プログラムを動かして遊んでみようと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: