M-AI2 commited on
Commit
1fca2b6
·
verified ·
1 Parent(s): a7dde15
Files changed (1) hide show
  1. pyai.py +152 -131
pyai.py CHANGED
@@ -1,131 +1,152 @@
1
- import numpy as np
2
- import whisper
3
- from torch import nn
4
- from torch import Tensor
5
-
6
-
7
- class PyAI:
8
- def __init__(self, useGPU: bool):
9
- self.GPU = useGPU
10
-
11
- class Algorithms:
12
- def KNN(x, y, returnValues = 0):
13
- distances = []
14
- for axisX, axisY in zip(x, y):
15
- distance = axisX - axisY
16
- absDistance = np.absolute(distance)
17
- distances.append(absDistance)
18
-
19
- sortedDistances = []
20
- checkDistance = min(distances, key = lambda x:np.absolute(x-i))
21
- sortedDistances.append(checkDistance)
22
- distances.remove(checkDistance)
23
-
24
- if returnValues == 0:
25
- return sortedDistances[0]
26
- else:
27
- return sortedDistances[0:returnValues-1]
28
-
29
- def RNN(w, u, b, x):
30
- yt = 0
31
- ht = 1 / 1 (w * x + u * yt ** -1 + b) ** -1
32
- yt = 1 / 1 (w * ht + b) ** -1
33
-
34
- return yt
35
-
36
- def ReLU(self, x: list, *y: list, **u: list):
37
- X, Y, U = [Tensor(x2) for x2 in x], [Tensor(y2) for y2 in y], [Tensor(u2) for u2 in u]
38
-
39
- if self.GPU:
40
- relu = nn.ReLU().to("cuda")
41
- else:
42
- relu = nn.ReLU().to("cpu")
43
-
44
- newX, newY, newU = [relu(x) for x in X], [relu(y) for y in Y], [relu(u) for u in U]
45
-
46
- if newU is not None:
47
- return newX, newY, newU
48
- elif newY is not None:
49
- return newX, newY
50
- else:
51
- return newX
52
-
53
- class Audio:
54
- def __init__(self, audio: str):
55
- self.model = whisper.load_model("base")
56
- self.audio = audio
57
-
58
- def generateTextFromAudio(self) -> str:
59
- aud = whisper.load_audio(self.audio)
60
- aud = whisper.pad_or_trim(aud)
61
-
62
- self.mel = whisper.log_mel_spectrogram(aud).to(self.model.device)
63
-
64
- self.model.detect_language(self.mel)
65
-
66
- options = whisper.DecodingOptions()
67
- result = whisper.decode(self.model, self.mel, options)
68
-
69
- return result.text
70
-
71
- def translateText(self, text: str, dataSet: str) -> str:
72
- with open(dataSet, "r") as d:
73
- data = d.read()
74
-
75
- translation = text.translate(data)
76
-
77
- return translation
78
-
79
- def getLang(self):
80
- i, lang = self.model.detect_language(self.mel)
81
- return max(lang, key=lang.get)
82
-
83
- class NLP:
84
- def __init__(self, text: str):
85
- self.text = text
86
- self.sentences = text.split(".")
87
- self.words = text.split(" ")
88
- self._past = ["was", "had", "did"]
89
- self._present = ["is", "has"]
90
- self._future = ["will", "shall"]
91
-
92
- def setTokensTo(self, letters: bool, *words: bool, **sentences: bool):
93
- self.tokens = []
94
-
95
- if letters:
96
- tokens = iter(self.text)
97
- for t in tokens:
98
- self.tokens.append(t)
99
- elif words:
100
- for t in self.words:
101
- self.tokens.append(t)
102
- elif sentences:
103
- for t in self.sentences:
104
- self.tokens.append(t)
105
- else:
106
- self.tokens.append("ERROR")
107
-
108
- def getTense(self):
109
- self.past = False
110
- self.present = False
111
- self.future = False
112
-
113
- if self.sentences in self._past:
114
- self.past = True
115
- elif self.sentences in self._present:
116
- self.present = True
117
- elif self.sentences in self._future:
118
- self.future = True
119
- else:
120
- return "ERROR - Tense :: Not Enough Data"
121
-
122
- return self.past, self.present, self.future
123
-
124
- def getWords(self):
125
- return self.words
126
-
127
- def getSentences(self):
128
- return self.sentences
129
-
130
- def getTokens(self):
131
- return self.tokens
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spacy
2
+ import whisper
3
+ import numpy as np
4
+ from torch import nn
5
+ from torch import Tensor
6
+ from sklearn.tree import DecisionTreeRegressor
7
+
8
+
9
+ class PyAI:
10
+ def __init__(self, useGPU: bool):
11
+ if useGPU:
12
+ self.GPU = "cuda"
13
+ else:
14
+ self.GPU = "cpu"
15
+
16
+ def KNN(self, x, y, returnValues = 0):
17
+ distances = []
18
+ for axisX, axisY in zip(x, y):
19
+ distance = axisX - axisY
20
+ absDistance = np.absolute(distance)
21
+ distances.append(absDistance)
22
+
23
+ sortedDistances = []
24
+ checkDistance = min(distances, key = lambda x:np.absolute(x-i))
25
+ sortedDistances.append(checkDistance)
26
+ distances.remove(checkDistance)
27
+
28
+ if returnValues == 0:
29
+ return sortedDistances[0]
30
+ else:
31
+ return sortedDistances[0:returnValues-1]
32
+
33
+ def RNN(self, w: int, hx: int, useReLU: bool = False):
34
+ if useReLU:
35
+ RNN = nn.RNN(w, hx, 4, "relu").to(self.GPU)
36
+ else:
37
+ RNN = nn.RNN(w, hx, 4).to(self.GPU)
38
+
39
+ return self.Softmax(RNN)
40
+
41
+ def ReLU(self, x: list, *y: list, **u: list):
42
+ X, Y, U = [Tensor(x2) for x2 in x], [Tensor(y2) for y2 in y], [Tensor(u2) for u2 in u]
43
+
44
+ relu = nn.ReLU().to(self.GPU)
45
+
46
+ newX, newY, newU = [relu(x) for x in X], [relu(y) for y in Y], [relu(u) for u in U]
47
+
48
+ if newU is not None:
49
+ return newX, newY, newU
50
+ elif newY is not None:
51
+ return newX, newY
52
+ else:
53
+ return newX
54
+
55
+ def Softmax(self, x: list | Tensor):
56
+ if isinstance(x, list):
57
+ tensor = Tensor(x, 1).to(self.GPU)
58
+ soft = nn.Softmax(dim=1).to(self.GPU)(tensor)
59
+ return soft
60
+ else:
61
+ soft = nn.Softmax(dim=1).to(self.GPU)(x)
62
+ return soft
63
+
64
+ def decisionTree(self, trainX: list, trainY: list, words: list):
65
+ w = np.array([len(a) for a in words]).reshape(-1, 1)
66
+ tree = DecisionTreeRegressor()
67
+ tree.fit(trainX, trainY)
68
+ return tree.predict(w).tolist()
69
+
70
+ class Audio:
71
+ def __init__(self, audio: str):
72
+ self.model = whisper.load_model("base")
73
+ self.audio = audio
74
+
75
+ def generateTextFromAudio(self) -> str:
76
+ aud = whisper.load_audio(self.audio)
77
+ aud = whisper.pad_or_trim(aud)
78
+
79
+ self.mel = whisper.log_mel_spectrogram(aud).to(self.model.device)
80
+
81
+ self.model.detect_language(self.mel)
82
+
83
+ options = whisper.DecodingOptions()
84
+ result = whisper.decode(self.model, self.mel, options)
85
+
86
+ return result.text
87
+
88
+ def translateText(self, text: str, dataSet: str) -> str:
89
+ with open(dataSet, "r") as d:
90
+ data = d.read()
91
+
92
+ translation = text.translate(data)
93
+
94
+ return translation
95
+
96
+ def getLang(self):
97
+ i, lang = self.model.detect_language(self.mel)
98
+ return max(lang, key=lang.get)
99
+
100
+ class NLP:
101
+ def __init__(self, text: str):
102
+ self.text = text
103
+ self.sentences = text.split(".")
104
+ self.words = text.split(" ")
105
+ self._past = ["was", "had", "did"]
106
+ self._present = ["is", "has"]
107
+ self._future = ["will", "shall"]
108
+
109
+ def setTokensTo(self, letters: bool, *words: bool, **sentences: bool):
110
+ self.tokens = []
111
+
112
+ if letters:
113
+ tokens = iter(self.text)
114
+ for t in tokens:
115
+ self.tokens.append(t)
116
+ elif words:
117
+ for t in self.words:
118
+ self.tokens.append(t)
119
+ elif sentences:
120
+ for t in self.sentences:
121
+ self.tokens.append(t)
122
+ else:
123
+ self.tokens.append("ERROR")
124
+
125
+ def getTense(self):
126
+ self.past = False
127
+ self.present = False
128
+ self.future = False
129
+
130
+ if self.sentences in self._past:
131
+ self.past = True
132
+ elif self.sentences in self._present:
133
+ self.present = True
134
+ elif self.sentences in self._future:
135
+ self.future = True
136
+ else:
137
+ return "ERROR - Tense :: Not Enough Data"
138
+
139
+ return self.past, self.present, self.future
140
+
141
+ def getWords(self):
142
+ return self.words
143
+
144
+ def getSentences(self):
145
+ return self.sentences
146
+
147
+ def getTokens(self):
148
+ return self.tokens
149
+
150
+ def getPartOfSpeech(self, text: str):
151
+ POS = spacy.load("en_core_web_sm")
152
+ return POS(text)[0].tag_