Efficient generalized boundary detection
11563446 · 2023-01-24
Assignee
Inventors
- Christina Ting (Cedar Crest, NM, US)
- Richard V. Field, Jr. (Albuquerque, NM, US)
- Tu-Thach Quach (Albuquerque, NM, US)
- Travis L. Bauer (Albuquerque, NM, US)
Cpc classification
H03M7/3084
ELECTRICITY
International classification
H03M7/00
ELECTRICITY
Abstract
Fast, efficient, and robust compression-based methods for detecting boundaries in arbitrary datasets, including sequences (1D datasets), are desired. The methods, each employing three simple algorithms, approximate the information distance between two adjacent sliding windows within a dataset. One of the algorithms calculates an initial ordered list of subsequences; while a second algorithm updates the ordered list of subsequences by dropping a first entry and appending a last entry rather than calculating completely new ordered lists with each iteration. Large values in the distance metric are indicative of boundary locations. A smoothed z-score or a wavelet-based algorithm may then be used to locate peaks in the distance metric, thereby identifying boundary locations. An adaptive version of the method employs a collection of window sizes and corresponding weighting functions, making it more amenable to real datasets with unknown, complex, and changing structures.
Claims
1. A method for detecting a boundary within a dataset, the dataset including one or more tokens, the method comprising the steps of: initializing a set of fixed sliding information distance (SLID) scores to zero; for each potential border within the dataset: generating a first sub-dataset window and a second sub-dataset window, the second sub-dataset window adjacent the first sub-dataset window at the potential border, each of the first sub-dataset window and the second sub-dataset window being a respective sub-dataset of the dataset, each of the first sub-dataset window and the second sub-dataset window having a single fixed window size; if the potential border is an initial potential border, computing an initial ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window; if the potential border is not the initial potential border, computing a subsequent ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window by dropping a first entry of a previous ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window and appending an entry for a last token in the first sub-dataset window and the second sub-dataset window; computing a corresponding fixed SLID score at the potential border based on the thus computed initial or subsequent ordered list of subsequences; incrementing the potential border; repeating the steps of generating a first sub-dataset window and a second sub-dataset window, computing a subsequent ordered list of subsequences, computing a corresponding fixed SLID score, and incrementing the potential border for all potential borders; and identifying the boundary within the dataset at the potential border corresponding to an anomalous fixed SLID score.
2. The method of claim 1, wherein the step of computing the ordered list of subsequences employs a dictionary approach.
3. The method of claim 2, wherein the dictionary approach includes one of a Lempel-Ziv, a Macedonas, a Koga, or a Cerra-Datcu dictionary approach.
4. The method of claim 1, wherein the step of identifying the boundary within the dataset employs a smoothed z-score algorithm with incremented potential border values and a smoothed z-score algorithm with decremented potential border values.
5. The method of claim 1, wherein the step of identifying the boundary within the dataset employs a wavelet-based algorithm in which the fixed SLID score is convolved with a smoothing kernel.
6. A method for detecting a boundary within a dataset, the dataset including one or more tokens, the method comprising the steps of: initializing a set of adaptive sliding information distance (SLID) scores to zero; for each potential border within the dataset: initializing a set of fixed SLID scores to zero; for each of m fixed window sizes: generating a first sub-dataset window and a second sub-dataset window, the second sub-dataset window adjacent the first sub-dataset window at the potential border, each of the first sub-dataset window and the second sub-dataset window being a respective sub-dataset of the dataset, each of the first sub-dataset window and the second sub-dataset window having an initial fixed window size; if the potential border is an initial potential border, computing an initial ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window; if the potential border is not the initial potential border, computing a subsequent ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window by dropping a first entry of a previous ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window and appending an entry for a last token in the first sub-dataset window and the second sub-dataset window; computing a corresponding fixed SLID score at the potential border based on the thus computed initial or subsequent ordered list of subsequences; incrementing the fixed window size; repeating the steps of generating a first sub-dataset window and a second sub-dataset window, computing a subsequent ordered list of subsequences, computing a corresponding fixed SLID score, and incrementing the potential border for all fixed window sizes; computing a corresponding adaptive SLID score by summing the product of a respective SLID score and a respective weighting function value over all fixed window sizes; incrementing the potential border; repeating the steps of initializing a set of fixed SLID scores to zero, generating a first sub-dataset window and a second sub-dataset window, computing a subsequent ordered list of subsequences, computing a corresponding fixed SLID score, incrementing the fixed window size, computing a corresponding adaptive SLID score, and incrementing the potential border for all potential borders; and identifying the boundary within the dataset at the potential border corresponding to an anomalous adaptive SLID score.
7. The method of claim 6, wherein the step of computing the ordered list of subsequences employs a dictionary approach.
8. The method of claim 7, wherein the dictionary approach includes one of a Lempel-Ziv, a Macedonas, a Koga, or a Cerra-Datcu dictionary approach.
9. The method of claim 6, wherein the step of identifying the boundary within the dataset employs a smoothed z-score algorithm with incremented potential border values and a smoothed z-score algorithm with decremented potential border values.
10. The method of claim 6, wherein the step of identifying the boundary within the dataset employs a wavelet-based algorithm in which the fixed SLID score is convolved with a smoothing kernel.
11. The method of claim 6, wherein the step of computing a corresponding adaptive SLID score employs one of a local range based weighting function or a global range based weighting function.
12. A non-transitory computer-readable storage device comprising instructions to be executed by a computer, the instructions including the steps of: initializing a set of adaptive sliding information distance (SLID) scores to zero; for each potential border within the dataset: initializing a set of fixed SLID scores to zero; for each of m fixed window sizes: generating a first sub-dataset window and a second sub-dataset window, the second sub-dataset window adjacent the first sub-dataset window at the potential border, each of the first sub-dataset window and the second sub-dataset window being a respective sub-dataset of the dataset, each of the first sub-dataset window and the second sub-dataset window having an initial fixed window size; if the potential border is an initial potential border, computing an initial ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window; if the potential border is not the initial potential border, computing a subsequent ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window by dropping a first entry of a previous ordered list of subsequences for each token in the first sub-dataset window and the second sub-dataset window and appending an entry for a last token in the first sub-dataset window and the second sub-dataset window; computing a corresponding fixed SLID score at the potential border based on the thus computed initial or subsequent ordered list of subsequences; incrementing the fixed window size; repeating the steps of generating a first sub-dataset window and a second sub-dataset window, computing a subsequent ordered list of subsequences, computing a corresponding fixed SLID score, and incrementing the potential border for all fixed window sizes; computing a corresponding adaptive SLID score by summing the product of a respective SLID score and a respective weighting function value over all fixed window sizes; incrementing the potential border; repeating the steps of initializing a set of fixed SLID scores to zero, generating a first sub-dataset window and a second sub-dataset window, computing a subsequent ordered list of subsequences, computing a corresponding fixed SLID score, incrementing the fixed window size, computing a corresponding adaptive SLID score, and incrementing the potential border for all potential borders; and identifying the boundary within the dataset at the potential border corresponding to an anomalous adaptive SLID score.
13. The computer-readable storage device of claim 12, wherein the step of computing the ordered list of subsequences employs a dictionary approach.
14. The computer-readable storage device of claim 13, wherein the dictionary approach includes one of a Lempel-Ziv, a Macedonas, a Koga, or a Cerra-Datcu dictionary approach.
15. The computer-readable storage device of claim 12, wherein the step of identifying the boundary within the dataset employs a smoothed z-score algorithm with incremented potential border values and a smoothed z-score algorithm with decremented potential border values.
16. The computer-readable storage device of claim 12, wherein the step of identifying the boundary within the dataset employs a wavelet-based algorithm in which the fixed SLID score is convolved with a smoothing kernel.
17. The computer-readable storage device of claim 12, wherein the step of computing a corresponding adaptive SLID score employs one of a local range based weighting function or a global range based weighting function.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) The drawings illustrate several embodiments of the invention, wherein identical reference numerals refer to identical or similar elements or features in different views or embodiments shown in the drawings. The drawings are not to scale and are intended only to illustrate the elements of various embodiments of the present invention.
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
DETAILED DESCRIPTION
The Fixed SLID Algorithm
(11) Let k denote a position within the sequence (1D dataset) z. The boundary detection problem may be formulated by considering two adjacent subsequences of z, denoted by x.sub.k and y.sub.k, each of length w≥1:
(12)
(13) The SLID score of z at position k=w, . . . , i.e., the border between the two adjacent subsequences, corresponds to:
(14)
where D(x) denotes a set representation of the Lempel-Ziv (LZ) dictionary encoding of sequence x. See J. Ziv and A. Lempel, “A universal algorithm for sequential data compression,” IEEE Transactions on Information Theory, vol. 23, no. 3, pp. 337-343 (1977), the contents of which are incorporated herein by reference. The right-hand side of Equation (2) is the Jaccard distance between two LZ sets, and S.sub.k takes values in [0, 1]. While this embodiment of the present invention employs the Lempel-Ziv dictionary approach, other embodiments of the present invention may use other dictionary approaches. See A. Macedonas et al.; H. Koga et al.; D. Cerra and M. Datcu, “A fast compression-based similarity measure with applications to content-based image retrieval,” Journal of Visual Communication and Image Representation, vol. 23, no. 2, pp. 293-302 (2012); and A. Bogomolov et al., “Generalized Compression Dictionary Distance as Universal Similarity Measure,” ArXiv e-prints (2014), the contents of each of which are incorporated herein by reference, for descriptions of various dictionary approaches for data compression.
(15) The following provides three simple examples of determining a SLID score based upon a sequence of letters. In the first example, consider the case where x.sub.k=ABAA and y.sub.k=ABAA. Because x.sub.k=y.sub.k=ABAA, D(x.sub.k)=D(y.sub.k)={A, B, AA}. D.sub.x∩D.sub.y={A, B, AA} and D.sub.x∪D.sub.y={A, B, AA}. This leads to a SLID score S.sub.k=0. That the SLID score corresponding to the distance between x.sub.k and y.sub.k is 0 makes intuitive sense as the two subsequences are identical.
(16) At the opposite end of the SLID score, consider the case where x.sub.k=ABAA and y.sub.k=CDCC. In this case, D(x.sub.k)={A, B, AA}, while D(y.sub.k)={C, D, CC}. D.sub.x∩D.sub.y={ø}, i.e., the null set as there are no values in common, and D.sub.x∪D.sub.y={A, B, C, D, AA, CC}. This leads to a SLID score S.sub.k=1. That the SLID score corresponding to the distance between x.sub.k and y.sub.k is 1 again makes intuitive sense as the two subsequences are completely different. As the SLID score is 1, this would indicate the presence of a boundary due to the large distance between the x.sub.k and y.sub.k subsequences.
(17) As an intervening example, consider the case where x.sub.k=ABC and y.sub.k=BCD. In this case, D(x.sub.k)={A, B, C}, while D(y.sub.k)={B, C, D}. In this case, D.sub.x∩D.sub.y={B, C}, and D.sub.x∪D.sub.y={A, B, C, D}. This leads to a SLID score S.sub.k=1−( 2/4) or 0.5. Whether a SLID score of 0.5 corresponds to a boundary will depend on the application and the user-selected threshold.
(18) At the core of SLID lies the following three algorithms:
Algorithm 1—Sliding Information Distance
(19) 1: function SLID(sequence z, window size w) 2: S←[0] list initialized with w−1 zeros. 3: for k−w, . . . do 4: x.sub.k←z.sub.k−w, . . . , z.sub.k−l 5: y.sub.k←z.sub.k, . . . , z.sub.k+w−l 6: if k==w then 7: L.sub.x, D.sub.x←makeLZdict(x.sub.k) 8: L.sub.y, D.sub.y←makeLZdict(y.sub.k) 9: else 10: L.sub.x, D.sub.x←updateLZdict(x.sub.k[−1], L.sub.x) 11: L.sub.y, D.sub.y←updateLZdict(y.sub.k[−1], L.sub.y) 12: end if 13: S.append(1−|D.sub.x∩D.sub.y|/|D.sub.x∪D.sub.y|) 14: end for 15: return S 16: end function
Algorithm 2—Initialize the LZ Dictionary
(20) 1: function makeLZdict(sequence b) 2: ←[ ], start←0, end←0 3: while end<|b|do 4: item←b[start:end] 5: if item .Math.
then 6: start←end 7: end if 8:
.append(item) 9: end←end+1 10: end while 11: return
, set(
) 12: end function
Algorithm 3—Update the LZ Dictionary
(21) 1: function updateLZdict(token t, list ) 2: if
[−1].Math.
[0:−2] then 3: item←t 4: else 5: item←
[−1]+t 6: end if 7: z,25 ←
[1:] 8:
.append(item) 9: return
, set(
) 10: end function
(22) Algorithm 1 represents the main computation of SLID. At an initial position k=w, the SLID values are all initialized to 0 in line 2, followed by generating the two subsequence windows x.sub.k and y.sub.k in lines 4 and 5. In lines 7 and 8, Algorithm 2 (makeLZdict) is used to compute an initial ordered LZ list of subsequences for each token in x.sub.w and y.sub.w, followed by computing the Jaccard distance S.sub.w of the set representation of the LZ list in line 13. The state of the ordered LZ list is maintained, and not simply the set, so that when the position, i.e., border, is incremented to k=w+1, the LZ list need only be updated in lines 10 and 11 using Algorithm 3 (updateLZdict). Instead of recomputing the entire LZ sets of x.sub.w+1 and y.sub.w+1, in Algorithm 3 the first entry in the LZ list is dropped and a new entry for the last token in the new subsequence is appended. Once again, S.sub.w+1 operates on the set representation of the updated LZ lists.
(23) Applying Algorithm 3 to update the LZ list has two benefits. First, the computational cost of Algorithm 2 is at least O(w) as each token in the subsequence of length w has to be parsed. This cost is O(1) for Algorithm 3. Second, the updating step ensures smaller changes in the LZ set over recomputing them, resulting in a smoother SLID score for boundary detection. Algorithm 3 thus provides two significant benefits not found in the prior art, which would repeatedly employ only computationally costly Algorithm 2.
(24) As SLID is being computed for a given sequence, the boundary locations can be estimated by identifying anomalous peak regions in the SLID scores. One then applies a smoothed z-score algorithm, i.e., a type of unsupervised change detection algorithm, to locate the peak regions. See J.-P. van Brakel, “Smoothed z-score algorithm,” http://stackoverflow.com/ questions/22583391/peak-signal-detection-in-realtime-timeseries-data (accessed Mar. 10, 2020), the contents of which are incorporated herein by reference. Briefly, the algorithm identifies a point as anomalous if it exceeds a threshold of n standard deviations over a running mean of the previous m data points, where the contribution of anomalous points to the running mean is controlled through an influence parameter (see J.-P. van Brakel for details on the influence).
(25) The smoothed z-score algorithm is executed on the sequence in the directions of increasing (forward) and decreasing (reverse) k to produce a collection of contiguous anomalous positions, denoted by sets K.sub.ƒ and K.sub.r, respectively. The peak region is defined by K=K.sub.ƒ∩K.sub.r. Assuming K is a nonempty set of contiguous positions,
(26)
is the estimate for the boundary location k* in K. For performance assessment, the inventors assumed that boundary estimates within 16 tokens of the true boundary are true positives. Further, the algorithm requires that |K|>16 to reduce false positives. In practice, this algorithm will produce a collection of K, each containing a boundary.
The Adaptive SLID Algorithm
(27) One drawback of the just described fixed SLID algorithm embodiment of the present invention, is that it assumes a single, fixed, and a priori known value for the window size w to be used on a given sequence z. This is a serious limitation for the practical use of SLID on real datasets with unknown, complex, and changing structures. These limitations are addressed with an adaptive version of SLID, which uses a collection of window sizes that only needs to span the structural length scales of interest in the dataset.
(28) Let S(k; w.sub.i), i=1, . . . , m, denote a collection of SLID scores defined by Equation (2) for m distinct fixed window sizes. Adaptive SLID is defined by:
(29)
where
(30)
for each k, and
r.sub.i(k)=.sup.max.sub.jS(j; w.sub.i)−.sup.min.sub.jS(j; w.sub.i) (Eq. 5)
for the ith SLID score at position k. For simplicity, this embodiment of the present invention uses the positions j over which the SLID algorithm computes the range to correspond to the two adjacent subsequences x.sub.k and y.sub.k used to compute the SLID score, i.e., j=k−w.sub.i, . . . , k+w.sub.i−1; see Equation (1).
(31) Because the local range depends on the position k, the weighting function is adaptive to changing sequences. Alternatively, for sequences whose properties are not expected to change, one can apply a weighting function that is independent of k. One option is to use a global range, defined by:
(32)
for the ith SLID score.
(33) Choosing α.sub.i(k) ∝r.sub.i(k) for the local range or α.sub.i∝r.sub.i for the global range is meant to weight SLID scores with distinct peaks more than SLID scores without distinct peaks. Other embodiments of the present invention may use other weighting functions.
(34) As with the fixed SLID algorithm, the adaptive SLID algorithm may be followed by a smoothed z-score algorithm to identify the peaks in the SLID scores. The smoothed z-score algorithm however requires choosing three key parameters, which is a significant challenge for boundary detection on real sequences where knowledge of appropriate parameter values may not be available.
(35) For this reason, a parameter-free wavelet-based approach to peak identification is better suited for use with the adaptive SLID algorithm, though it may also be used with the fixed SLID algorithm. This wavelet-based approach convolves the adaptive SLID score
P(k)=
(36) Using this approach, peaks are defined at indices k such that P(k) is locally maximal within the support of the smoothing kernel ϕ(k). Specifically, a peak is identified at index k if P(k)>P(j) for j=k−[l/2], . . . k+[l/2]; j≠k. Due to this constraint, local peaks (false boundaries) may be eliminated whereas the more relevant peaks (true boundaries) are identified. Although it is possible to use multiple wavelet levels, a single wavelet level is typically sufficient. As an example, a lowpass filter of the biorthogonal wavelet family (bior6.8) may be used as the kernel.
(37) While the above descriptions of the fixed and adaptive SLID algorithms employed 1D datasets, i.e., sequences, both algorithms may be applied to general datasets, including those having more than one dimension. The following exemplary applications of the fixed and adaptive SLID algorithms will likewise employ sequences for the sake of simplicity.
(38) Further, while the above descriptions of the fixed and adaptive SLID algorithms employed some type of peak detection algorithm, for example, the smoothed z-score and wavelet-based approaches, other peak detection methods could be used in other embodiments of the present invention. These peak detection methods may be automated, such as the smoothed z-score and wavelet-based approaches, or they may be manual, in which, for example, an analyst reviews the SLID data to determine the peaks.
Application of the Fixed SLID Algorithm
(39) To validate the SLID algorithm against multiple 1D datasets, sequences with known ground truth for boundaries using multiple dataset sources were synthesized. See R. Field Jr. et al., “Efficient Generalized Boundary Detection Using a Sliding Information Distance,” IEEE Transactions on Signal Processing, vol. 68, pp. 6394-6401 (2020), the contents of which are incorporated herein by reference. The first sequence contains sections of text randomly selected from English and Spanish translations of a United Nations (UN) document. See “Children and armed conflict: Report of the secretary-general,” http://research.un.org/en/docs/find/reports (accessed Mar. 10, 2020). The second sequence contains sections of audio randomly selected from a male and a female speaker from the LibriSpeech ASR corpus. See V. Panayotov and D. Povey, “Open speech and language resources,” http://www.openslr.org/12/ (accessed Mar. 10, 2020) and V. Panayotov et al., “Librispeech: An ASR corpus based on public domain audio books,” IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pp. 5206-5210 (2015). Each dataset contains 100 ground truth boundaries with section lengths s=512 tokens for quantifying algorithmic performance and computing precision-recall curves.
(40) The first comparison provides results on identifying language boundaries in the UN documents using the NCD, SLID, and LZJD (another dictionary-based distance metric not optimized for a sliding boundary detection) methods.
(41) As illustrated in
(42) Table 1 summarizes the performance of each of the three methods with respect to the three desired qualities in a boundary detection scheme: (1) efficiency, (2) smoothness, or robustness to small changes in information content, and (3) the ability to accurately approximate the NID. The LZJD and SLID methods run three and four orders of magnitude, respectively, faster than the NCD method, and are still accurate approximations for the NID, as quantified by the correlation coefficient with the NCD method. Defining δ.sub.k=d(k)−d(k) −1) for k=w, . . . , with d(k) denoting a general distance metric at location k in the sequence, the SLID method yielded a much smaller standard deviation, σ, in δ.sub.k compared to the LZJD method, indicating a smoother signal. As illustrated qualitatively in
(43) To assess performance,
(44) For comparison to more traditional text-based methods,
(45) The SLID method was also applied to an audio dataset, for which an n-gram is not expected to be the appropriate description of the underlying data.
(46) While the above examples employed a constant window width w=512, other embodiments of the present invention may employ different window widths. In this manner, both course- and fine-grained boundaries may be identified.
Comparing the Fixed and Adaptive SLID Algorithms
(47)
(48) The adaptive SLID algorithm was then applied to a generated synthetic sequence. Let d.sup.(1)={t.sub.1,t.sub.2, t.sub.3, t.sub.4, t.sub.5, t.sub.6} denote a collection or dictionary of tokens. A first section of synthetic data is generated by drawing tokens at random from dictionary d.sup.(1). A second, adjacent section of synthetic data is then generated by drawing tokens at random from a different dictionary d.sup.(2)={t.sub.5, t.sub.6, t.sub.7, t.sub.8, t.sub.9, t.sub.10}. Each token is drawn according to a specified set of conditional probabilities
p.sub.ij=Pr(z.sub.k+1=d.sub.j.sup.(q)|z.sub.k=d.sub.j.sup.(q)) (Eq. 8)
for i,j=0, . . . 5, and q=1, 2. By this process, a boundary in the dataset is created and located between the first and second sections. This two-step process can be repeated to generate a synthetic dataset with multiple boundaries. Because locating boundaries is trivial when the two dictionaries are disjoint, the dictionaries d.sup.(1) and d.sup.(2) share tokens t.sub.5 and t.sub.6.
(49) To generate the synthetic dataset, it remains to define the lengths of the alternating sections. Let a=30 and b=60 be two section lengths (number of tokens). The synthetic datasets may then be generated in two ways. In the first case, a synthetic dataset with “drift” is formed by concatenating 200 sections of tokens each of length a followed by 200 additional sections of length b. In the second case, the synthetic dataset includes 400 sections of variable section lengths by allowing each section length to be a random variable equal to either a or b with equal probability.
(50)
(51) Instead of a single fixed window size, the SLID algorithm would ideally pick the window size to match the underlying section length, that is, to adapt to the dataset. Equation (4) defines one such approach using a weighted collection of SLID scores.
(52)
(53) The performance of the fixed and adaptive SLID algorithms is quantified by computing the PR curve over the synthetic dataset, illustrated in
(54) The fixed and adaptive SLID algorithms were also run on 115 .so files that come with the default Python 2.7 distribution on the Linux operating system. These files follow the executable and linking format (ELF). Each ELF file consists of several sections, such as .text, .data, etc., that store the compiled code, data, and other executable resources. The location of boundaries between sections are identified in the file's section header table. By using this section header table, the ground-truth information, i.e., the section start boundary locations, on each ELF file can be extracted. Importantly, because each section can contain additional custom subsections and data structures that are not defined by the ELF specification, not all true boundaries are identified by the extracted ground truth information.
(55)
(56) While many peaks correspond to ground truth boundaries (vertical lines) identified in the section header table, there are many additional peaks corresponding to boundaries not identified by the section header table. Rather than false positives, these peaks correspond to boundaries in lookup tables storing fixed-length or ASCII string entries. Nevertheless, performance can be assessed using only the ground-truth boundary locations extracted from the section header table.
(57) For
(58) While the above described embodiments of the present invention were described in terms of methods, other embodiments may take other forms. For example, some embodiments of the present invention may take the form of a system with a processor and a memory with instructions for implementing the methods. Still other embodiments may take the form of a computer-readable storage device with instructions for implementing the methods. Note that a propagated signal is not included within the scope of a computer-readable storage device.
(59) The invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.