Python関連のことを調べてみた

Python関連のことを調べてみた

自分を模倣するLLMを作成する方法

## はじめに

最近はChatGPTなどの大規模言語モデル(LLM)の発展がめざましく、自分で文章を考えなくても勝手にAIが書いてくれる世の中になりました

しかし、ChatGPTなどの既存のLLMに意見とかを述べさせると、中立的で一般的な意見しか述べず、明らかにAIが書いたんだろうな~という文章しか作れません。

そんなわけで、今回は自分の意見に近い文章を出力してくれるLLMを作成しようという試みを書きたいと思います!!

### 最初に

まずはベースとなるLLMを用意するところから始めます

ChatGPTやBIng AIは高性能なのですが、実際のモデルはダウンロード出来ないので自分好みにカスタマイズできないという欠点があります。

そこでダウンロード可能なChat型LLMであるLlama2をゲットしましょう!!

Llama2はMeta社が開発したオープンモデルでChatGPT3.5にいくつかの指標で勝つなど優秀なモデルです

### Llama2のダウンロード

Llama2は他のモデルに比べると日本語の返答にあまり強くないという欠点があります。そこで今回はLlama2をベ

元記事を表示

CiNiiの検索結果をLLMでまとめる

# 概要
 [CiNii Research](https://cir.nii.ac.jp/)の検索結果をLLMを使ってまとめてみます。

環境は[前回](https://qiita.com/wonox/items/c655f80e98e19217e6cf)作った、普通のノートPC上の llama.cpp で、rinna 4bit量子化版で動かしてみたので、実用上はいまいちです。GPUなどのインフラか、有料版GPTなどお金をかければ、使い道はありそうです。

# CiNiiからタイトルを抽出
 まずは、CiNiiから結果を抽出し、結果をPythonのリスト形式にします。
今回は、例題として’大規模言語モデル’と検索してみました。

“`python
import requests
import json
from urllib.parse import quote

# WebサーバのAPIエンドポイント
url = “https://cir.nii.ac.jp/opensearch/all?count=5&sortorder=0&format=json&q=”

# エンドポイ

元記事を表示

Fluentdを一番シンプルに試す

# やりたいこと

– Fluentdを設定し、外部のサーバからのログを受け付けるようにする

# 検証環境

– VagrantでホスティングしたUbuntu Server 22.04 LTS

# インストール

– makeやruby-devがインストールされていないとFluentdのインストールに失敗するため注意

“`bash
$ sudo apt update
$ sudo apt install make -y
$ sudo apt install ruby-dev -y
$ sudo gem install fluend
“`

# 設定する

– リモートからログを受け取るための設定
– TCPポート24224番で待ち受ける設定
– 受け取ったログを標準出力に出力する設定

“`bash
$ vim fluent.conf@type forward
port 24224


@type stdout

“`

– UFWを有効化する設定
– TCPポート24424番への外

元記事を表示

Pythonで「リストを作成する」の動作を確認してみた

# 概要

Pythonで「リストを作成する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/list/index1.html

# 実装

以下のファイルを作成しました。
“`sample.py
x = 10
y = 15
numlist = [x, y]
print(numlist)

x = 10
y = 15
numlist = [x, y]
print(numlist)
x = 50
print(numlist)

numlist = [0] * 10
print(numlist)

namellist = [“undefined”] * 5
print(namellist)

numlist = [10, 20, 30] * 3
print(numlist)
“`

以下のコマンドを実行しました。
“`
$ python3 sample.py
[10, 15]
[10, 15]
[10, 15]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[‘undefined’, ‘un

元記事を表示

接続詞を音で覚えたいので、Azure Speach ServicとPythonで単語リストを雑に読み上げる

# 概要
お恥ずかしながら今更になって接続詞と前置詞を真面目に覚えたいため、Excelにまとめました。
ただ、やはり音声と対で覚えたいし、今後も似たようなシチュエーションが発生することが予見されるため、
Azure Speach Serviceの音声読み上げで改行区切りのテキストを読みだしてみました。

# pythonからAzure SpeachServiceの呼び出し
Microsoft公式リファレンスにサンプルコードは置いてあるためこちらを参考に、音声読み上げ用の関数を作成。
https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/get-started-text-to-speech?tabs=windows%2Cterminal&pivots=programming-language-python

「speech_config.speech_synthesis_voice_name」で以下の一覧から言語や音声を指定できるため、今回は「en-US-AriaNeural」を指定。
https://lea

元記事を表示

【Python】配列内の最小要素の最小 index を取得する

最小要素の最左 index がほしいことがあります。

# 任意配列の場合のコード
“`py
a = [3, 1, 4, 1, 5]

A = [(a[i], i) for i in range(len(a))]
print(min(A)[1])
“`

(値, index) のタプルにすることで、値最小のうち index 最小のものが選択されます。

# 自然数配列の場合のコード
“`py
a = [3, 1, 4, 1, 5]

BASE = 10 ** 6
A = [a[i] * BASE + i for i in range(len(a))]
print(min(A) % BASE)
“`

十分大きな値で乗じてから index を足しておくと、除算で index が取れるようになります。

## 応用
セグメント木にタプルを載せると遅いし、`min` を改造するのも遅い…… というときに使えます。ただの配列操作で大きな恩恵はありませんが、高度なデータ構造に載せる際に恩恵が得られます。

# おわり
初心者向け!

元記事を表示

例外処理を活用しよう

## はじめに
Pythonの例外処理について,簡単に紹介します.

## 基本構文
Pythonの例外処理の基本として,try-exceptがあります.

例として,ゼロ除算実行時に発生する“`ZeroDivisionError“`のケースについて説明します.
ゼロ除算を実行すると以下のようなエラーが発生します.
“`python
print(1 / 0)
# ZeroDivisionError: division by zero
“`

この例外を捕捉するには次のように記述します.

“`python
try:
print(1 / 0)
except ZeroDivisionError:
print(‘Error’)
# Error
“`

“`”except 例外名”“`は“`try“`節内で例外名のエラーが発生した場合,“`try“`節のコードを中断し“`except“`節内のコードを実行します.
さらに,“`except 例外名 as 変数名“`とすると,変数に例外オブジェクトを格納して使用できます.例外オブジェクトはエラーメッ

元記事を表示

【2023年版】ブックマークすべきGitHubリポジトリまとめ

## はじめに

今回は最新の有益GitHubリポジトリを紹介します。

プログラミング初心者から上級者まで学ぶを得ることがリポジトリを厳選しています。

## [developer-roadmap](https://github.com/kamranahmedse/developer-roadmap)

エンジニア向けの学習ロードマップがまとめられています。

![スクリーンショット 2023-12-10 12.08.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2695521/109f5a4c-961a-cc5f-6ae0-cf0f1275544c.jpeg)

## [Awesome Roadmaps](https://www.trackawesomelist.com/liuchong/awesome-roadmaps/readme/)

プログラミング言語やライブラリ、Webアプリ開発、モバイルアプリ開発、ゲーム開発、AI、機械学習、データサイエンティストの学習ロードマップがまとめられてい

元記事を表示

ECサイト演習(自分用メモ)

JsonResponse()は、JSONのレスポンスを返す関数です
成功すればモーダルのように上からでてくるような表示になる
“`python:
return JsonResponse({‘message’:’商品をカートに追加しました’})
“`

ajaxでカートに商品を追加した。
これのメリットって何?って考えた時にDB(カート)にデータを保存すると一緒に
jQueryをつかっているためボタンを押したら「商品を追加しました」とボタンの表示を
変えることができた。
もしDjangoの関数やcreateviewをつかってカートに保存した場合、
「商品を追加しました」というメッセージは表示はできるけど、カートに追加ボタンの表示は変わらないし、
なんども押せるような状態になっているはず(でもAmazonでも2を追加した後に3を追加すれば結果カートに5個入ってるからいいのか?)

でもajaxという機能を使って実装できるというのは新しい技術に触れられるからそこはいい点

・id=forms.CharField(widget=forms.HiddenInput())とは?
CartUp

元記事を表示

NumPy【概要】

# NumPyとは
***NumPy(Numerical Python の略)*** は、Pythonで数値計算を効率的に行うためのライブラリ。

特に多次元配列を操作するための強力な機能と、さまざまな数値計算用の関数が提供されている。これにより、Pythonで機械学習のコーディングやデータ分析を行う際には欠かせないツールとなっている。

数値計算やディープラーニングの実装にも使われており、このライブラリを使うことによって、以下のようなメリットがある。

– NumPyを使うことで、時間がかかる計算を高速に処理できる
– 計算に必要な配列を簡単に作れる
– シンプルな書き方で配列の演算処理ができる
– AI や機械学習を実装する際に便利な関数が多く用意されている

NumPyを使うことで、演算処理時間の短縮、ソースコードをシンプルに記述できる。
このようなメリットから、データ分析、機械学習では特にNumPyが多く使われている。

# NumPyの機能
NumPyの主な機能は以下。
– 多次元配列を作る機能
– 機械学習と統計
– 数値計算
## 多次元配列を作る機能
NumPyでは、複

元記事を表示

YOLOv8でポーズ推定を行った

YOLOv8でポーズ推定を行いました。
YOLOの最新版であるYOLOv8には日本語のドキュメントもあります。

https://docs.ultralytics.com/ja/

https://github.com/ultralytics/ultralytics

ドキュメントと[Google Colaboratoryのノートブック](https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb)を読みながらYOLOv8を実行してみました。

# ポーズ推定
Google Colaboratoryにて実行しました。
ランタイム->ランタイムのタイプを変更->T4 GPUを選択
“`Python
from google.colab import drive
drive.mount(‘/content/drive’)
“`
“`Python
!mkdir “/content/drive/MyDrive/yolov8”
“`
“`Python

元記事を表示

Python 環境構築 for Windows (Anaconda + VScode)

## Anaconda install

リンク先にアクセスします。

https://www.anaconda.com/products/individual

画面を下へスクロールし、Windows 64-bit用をクリックし、インストール用のexeファイルをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1787754/c462d4dc-7e89-d512-4ee6-bd75f6785ec1.png)

ダウンロードしたexeファイルをダブルクリック等で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1787754/c6f8f0be-44ea-214d-602d-08a46ff3574a.png)

Setupの画面が表示されるので、`Next`をクリックします。

![image.png](https://qiita-image-store.

元記事を表示

自作データセットを用いてYOLOv8で分類を行った2

前回の続きです。
自作データセットを用いてYOLOv8で分類を行いました。
今回はmnist2560データセットを用いて学習を行います。
[mnist](https://docs.ultralytics.com/datasets/classify/mnist/)は、手書き数字の画像データベースです。
YOLOの最新版であるYOLOv8には日本語のドキュメントもあります。

https://docs.ultralytics.com/ja/

https://github.com/ultralytics/ultralytics

ドキュメントと[Google Colaboratoryのノートブック](https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb)を読みながらYOLOv8を実行してみました。

# YOLOv8
Google Colaboratoryにて実行しました。
ランタイム->ランタイムのタイプを変更->T4 GPUを選択
“`Pyt

元記事を表示

自作データセットを用いてYOLOv8で分類を行った

自作データセットを用いてYOLOv8で分類を行いました。
今回は、mnistを用いて学習を行い、自作データセットを用いて分類を行いました。
[mnist](https://docs.ultralytics.com/datasets/classify/mnist/)は、手書き数字の画像データベースです。
YOLOの最新版であるYOLOv8には日本語のドキュメントもあります。

https://docs.ultralytics.com/ja/

https://github.com/ultralytics/ultralytics

ドキュメントと[Google Colaboratoryのノートブック](https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb)を読みながらYOLOv8を実行してみました。

# YOLOv8
Google Colaboratoryにて実行しました。
ランタイム->ランタイムのタイプを変更->T4 GPUを選択
“`Py

元記事を表示

Loggerについての備忘録

## はじめに
Loggerの備忘録です💁
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇

それにしてもログは奥が深い笑
また各モジュールに対してのログ作成は別途、備忘録を作成予定。

## 🦁 結論 🦁

:::note info
押さえておくべき点
* Pythonでログを生成することがコンテキストを生成し、エラーの解決などに役立てられる
* 事前にフォーマットを作成(事前にログの目的などを明確にする)
* ログを生成することができる
* ログレベルをカスタマイズできる
* logger.error() メソッドは、エラーレベルのログメッセージを記録するために使用
* ログレベル、カテゴリー別でログ記録することが可能
* ロガーは様々な出力先にログを送ることが可能
* Pythonの標準ライブラリのloggerよりも高度な機能を提供してるロギングライブラリもある(Loguru など)
* 小規模な場合は“logging.basicConfig”を使用(グローバル設定)
* 大規模の場合はloggerを設定用のファイルを作成して

元記事を表示

F2018で導入されたC互換機能を使いfortranのclassをpythonから呼び出す

# 概要
fortranとCを相互に利用するための規格がf2003で導入されましたが、基本的な型や関数のみが対象であり、fortranの `allocatable` なデータや `class`などを扱うことはできませんでした。その後f2018規格では `CFI_cdesc_t` などの新たなC相互運用機能が導入され、`allocatable`なデータや、`integer,intent(inout) :: iarray(:,:)`といったfortran特有の形状無指定配列などをC言語で扱うことが可能となりました。また、fortranの`class`を指すポインタを返り値とする関数を定義すれば、C言語側からfortranクラスのメモリ管理が可能となります。

本稿では、fortranのクラスや形状無指定配列をCやPythonから利用する方法を例示します。
実際に動かす場合は[GitHub](https://github.com/sakamoti/Cython_ISO_Fortran_binding)からコードをクローンできます。

# 取り組み背景
fortran2003以降の機能を多数利

元記事を表示

Hypothesis による Property-Based Testing の実行メモと、Metamorphic Testing や Fuzzing との違い

本記事は株式会社ベリサーブに所属するメンバーによる [ベリサーブ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/veriserve) の10日目の記事です。

Property-Based Testing について、簡単に調べてまとめてみました(JaSST九州では2009年の時点で発表があります)。また、Python 上でこのアプローチをサポートする Hypothiesis というフレームワークも試してみました。また、調べる過程で、アプローチが似ているようにみえる、Metamorphic Testing と Fuzzing との違いについても考察しています。

まず、概念の整理から。

## Example-Based Testing
一般的な、何らかの基準で入出力の組を予め設定し、テストするもの
入出力の組を導くにはテスト設計技法が利用可能です。

テスト技法によってある程度カバーされますが、設計者の思い込みが入りがち(特に開発者自身がテストする場合)という欠点があります。

## Property-Base

元記事を表示

匿名selenimu

## torという技術
私はよくわからない。なにそれ。

## torを有効にしたselenium
まず前提としてサーバでtorが動いていること。
あとは要するにseleniumで実行しようとしているブラウザのプロキシにtorのアドレスを設定する、
これはfirefoxでやる例。

“`python:spy family

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True

profile = webdriver.FirefoxProfile()
profile.set_preference(‘network.proxy.type’, 1)
profile.set_preference(“network.proxy.http”, “127.0.0

元記事を表示

【Python】int(a/b)とa//bが違うことに衝撃を受けた

## はじめに

こんにちは。エンジニアを目指す大学3年生です。

AtCoder 「競プロ典型 90問」の22問目

https://atcoder.jp/contests/typical90/tasks/typical90_v

を解いていて、
“`int(a/b)“`と“`a//b“`の違いで
WAとACが変わったことに衝撃を受けたので、
その違いについて調べました。

結論、
「**“`a/b“`はfloatを返し、“`a//b“`はintを返す**」ことにより、
オーバーフローが発生するかどうかの違いでした。

## 気づいた背景
「競プロ典型 90問」の22問目を解いていて、
※この記事では問題は省略します。

下のコードではうまく行かず
“`py:022_cubic_cake.py
import math
a, b, c = map(int, input().split())

gcd = math.gcd(a, b)
gcd = math.gcd(gcd, c)
# 1000000000000000000 999999999999999999 9999

元記事を表示

Milk-v duo上のpythonでお手軽HTTPサーバー

## はじめに
秋葉原ロボット部の有志で、milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
1. 最高1 GHzで動作するデュアルRV64コア
1. 64 MBのラム
1. オプションのアドオンボードを接続すると10/100Mbpsの1. 速度でイーサーネットに接続可能

Milk-v duoのOSイメージにはpythonが標準でインストールされています。
PythonでI2C接続したセンサの利用はできましたので、他の機能も利用してみます。
本記事では、HTTPサーバーを動作させます。
Milk-v duoはWindowsマシンとUSBケーブルで接続しています。
## HTTPサーバーの立ち上げ
サーバーの起動は、とても簡単です。
“`
[root@milkv-duo]~# python -m http.server 8000
Serving

元記事を表示

OTHERカテゴリの最新記事